MVCContribで生成されたグリッドの行を削除するための最良の戦略は何でしょうか。
このグリッドについて考えてみましょう。
Html.Grid(Model.Proc.Documents).Columns(column =>
{
column.For(c => c.Name).Named("Title");
column.For(c => c.Author.Name).Named("Author");
column.For("Action").Action(
delegate(DocumentDto doc)
{
const string cbxFrmt =
"<td><strong><a href=\"#\" onclick=\"DocDetails({0})\">View details</a></strong> | " +
"<strong><a href=\"#\" onclick=\"RemoveDoc({1})\">Delete</a></strong>" +
"</td>";
Response.Write(string.Format(cbxFrmt, doc.Id, doc.Id));
}
).DoNotEncode().Named("Action");
})
.Attributes(id => "documentgrid"));
各行には、RemoveDoc(docid)javascript関数を呼び出すリンクがあります。ここで、コントローラーでアクションを呼び出してデータモデル内のドキュメントを実際に削除することで行を削除する必要があります。これは非常に簡単ですが、その方法がわかりません。 Jqueryを使用してtbodyから行を削除します。お知らせ下さい。私は完全に間違った方向に進んでいますか?それを行うための最良の方法は何ですか?
そして、行の追加について。当初、私はそれをどういうわけかそのようにすることを考えました:
function UploadDocument() {
var action = '<%=Html.BuildUrlFromExpression<MyController>(c => c.UploadDocument(parameters))%>';
$.ajax({
type: "POST",
url: action,
data: { data to upload },
cache: false,
dataType: 'text',
success: function (data, textStatus) {
var newRow = "<tr class='gridrow'><td>" + v1 +
"</td><td>" + doc_author + "</td>" +
"<td><strong><a href=\"#\" onclick=\"DocDetails(doc_id_returned_by_ajax)\">View details</a></strong> | " +
"<strong><a href=\"#\" onclick=\"RemoveDoc(doc_id_returned_by_ajax)\">Delete</a></strong>" +
"</td>" +
"</tr>";
var docgrid = $('#documentgrid');
var tbody = $("table[class='grid']>tbody");
$(tbody).append(newRow);
},
error: function (xhr, textStatus, errorThrown) {
var msg = JSON.parse(xhr.responseText);
alert('Error:' + msg.Message);
}
});
}
しかし、これがベストプラクティスかどうかはわかりません。他の戦略はありますか?
ありがとう!