1
私は、すべてのデータを含む素敵なJSON文字列を返すアクションメソッド(サーバー側の処理)を呼び出すことによって、AJAX経由でコンテンツを読み込むJQuery DataTableを持つビューを持っています。私がやっている何AJAX経由でHTMLを返す方法は?
は次のとおりです。
- 私はDataTableのためのデータが含まれているリストを作成します。テーブルの各行は文字列配列です。これはDataTableの要件です。
- DataTableのすべてのデータを匿名オブジェクトに入れました。このデータは、行の量、データ(リスト)および他のものから成ります。
- すべてのデータがJSON形式で返されるように、この匿名オブジェクトからJSON文字列が作成されます。
- 魔法が発生し、データが自分のDataTableに表示されます。
問題は次のとおりです.Razorが自動的にエスケープするため、HTMLを出力できません。私はすでにHtml.Raw、新しいHtmlString()などのようなものを試してみましたが、問題は次のとおりです。DataTableが他のどの型も私が知る限り処理できないため、HTMLの文字列をListコレクションに入れなければなりません。
私のビュー内のDataTableには、どのような列を表示するかの定義が含まれていません。これはJSON文字列(Javascriptなど)をループするだけで自動的に行われ、Javascriptで表示されます。
質問:MVC3サーバー側の処理を使用しているときに、DataTableにHTMLをレンダリングするにはどうすればいいですか?ところで
、コード:
<table id="datatable">
<thead>
<tr>
<th>Id</th>
<th>Name</th>
<th>Destination address</th>
<th>Platform</th>
<th> </th>
<th> </th>
</tr>
</thead>
<tbody id="tabledata">
<!-- Content will be rendered here by AJAX -->
</tbody>
<tfoot>
<tr>
<th>Id</th>
<th>Name</th>
<th>Destination address</th>
<th>Platform</th>
<th> </th>
<th> </th>
</tr>
</tfoot>
</table>
とサーバー側の処理:
public JsonResult List()
{
List<PushApplication> pushApplications = _service.GetData(Request).ToList();
int totalRecords = _service.GetApplicationCount();
// Reformat the data.
List<string[]> aaData = new List<string[]>(pushApplications.Count);
aaData.AddRange(pushApplications.Select(application => new[]
{
application.Id.ToString(),
application.Name,
application.DestinationAddress,
application.Platform,
"<a href='/PushApplication/Edit/" + application.Id + "'>Modify</a>",
"<a href='/PushApplication/Delete/" + application.Id + "'>Delete</a>"
}));
// Construct anonymous object for the data table.
var data = new { sEcho = Request.QueryString["sEcho"], iTotalRecords = totalRecords, iTotalDisplayRecords = totalRecords, aaData = aaData };
return Json(data, JsonRequestBehavior.AllowGet);
}
私はJavascriptの以下のビットでデータテーブルを呼び出します。
$(document).ready(function() {
var oTable = $('#datatable').dataTable({
"bPaginate": true,
"bLengthChange": true,
"bFilter": true,
"bSort": true,
"bInfo": true,
"bAutoWidth": false,
"bProcessing": true,
"bServerSide": true,
"bJQueryUI": true,
"iDisplayStart": 0,
"sEcho": 1,
"sDom": 'T<"clear"><"top"fi>rt<"bottom"pl><"clear">',
"sAjaxSource": '/PushApplication/List',
"sPaginationType": "full_numbers",
"fnServerData": fnDataTablesPipeline,
"oTableTools": {
"sSwfPath": "/Plugins/TableTools/swf/copy_cvs_xls_pdf.swf"
},
"aoColumns": [
{ sWidth: '10%' },
{ sWidth: '30%' },
{ sWidth: '30%' },
{ sWidth: '30%' }
]
});
$("#submitForm").click(function() {
oTable.fnDraw();
});
});
あなたもJavaScriptコードのビットをポストすることができます – Rafay
まあ、魔法はJQuery DataTablesによって行われます。私がしなければならないのは、ライブラリを自分のHTMLに入れて
データで満たされています。正直なところ、7000行分のコードファイルのどの部分がデータのレンダリングを担当しているのか分かりません。 しかし私はJQuery DataTableを呼び出すJavaScriptコードを投稿しました。 –答えて
...のようなもの、謝罪ので、あなたはすでにそれを読んだ場合:
あなたには、いくつかのセルまたは行にHTMLを追加しようとしていますか?たとえば、拡張機能を持つボタンを追加しますか?
これを行う最善の方法は、JSONではなく(もちろん他のフレームワークでも可能ですが)、DataTablesコールバックにあります。行内の個々の行やセルに影響を与えたい場合は、
fnRowCallback
に移動してください。追加のウィジェットとマークアップをセルに追加しています。のDataTableのウェブサイトから
を[更新は、以下の(のhttp:// DataTableの。ネット/ REF#のfnrowcallbackは)ここでは、2次元配列でそれを行うだろう方法は次のとおりです。
サンプルのさらなる説明:コールバックは現在の行のオブジェクトのインスタンスであるnRowなど、いくつかの異なるオブジェクトを、受け入れaaDataに対応するaDataは、サーバ側によって返送される。これは単純なif文です:データの5番目の列に文字列 "A"がある場合は、nRowオブジェクトの5番目の列に移動し、 "A"の代わりに太字の "A"になるようにHTMLを変更します。コールバックの終了時に、nRowは現在変更された状態で戻されます。
もちろん、2D配列には制限されません。 3Dオブジェクトでキーと値のペアを使用している場合は、変更するには
aData["someLabel"]
のようなものを探します。列は対応する必要はありません。例では、両方とも5列目ですが、何でもできます。また、行自体を変更したい場合は、td
の中のnRow
を探すのではなく、その行を変更することもできます。出典
2011-12-30 18:06:36
ありがとうございます、私はそれを調べます。私は実際にHTMLをデータテーブル内のセル(この場合はハイパーリンク)に追加しようとしています。 fnRowCallBackを使用して行にHTMLを追加する方法のコード例がありますか? –
元の回答が更新されました。 –
うん、私はあなたの解決策でそれを働いている。ありがとう! –
何についてJQueryのappend()関数を使用していますか?私は私が私の最初の応答に誤解だと思うおおよそ
出典
2011-12-30 15:32:18
DataTableプラグインを使用すると、テーブルのHTMLを作成する必要はなく、実際には機能しません。 DataTablesはこれをすべて処理します。 –
関連する問題