正如@Robert Koritnik所建議的,處理這個問題的最好方法是使用PartialView。我建議有兩個單獨的控制器動作 - 一個處理原始請求,另一個處理AJAX新條目。這兩個操作都會調用相同的邏輯來獲取表格的數據。前者將數據與其他頁面數據一起放入視圖模型中。後者會將數據打包到局部視圖的模型中。
模型類
public class PageViewModel
{
....
public IEnumerable<TableViewModel> TableData { get; set; }
}
public class TableViewModel
{
...
}
控制器代碼
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult Index()
{
var model = new PageViewModel();
model.TableData = GetTableForUser(this.User);
return View(model);
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddEntry(...)
{
... add the new entry ...
var model = GetTableForUser(this.User);
return PartialView("TableView", model);
}
private TableViewModel GetTableForUser(IIdentity user)
{
...
}
查看代碼
主視圖
<% Html.RenderPartial("TableView", model.TableData); %>
<script type="text/javascript">
$('#entryForm').submit(function() {
$.post('<%= Url.Action("addentry", "controller") %>',
$('#entryForm').serialize(),
function(data) {
$('#table').replaceWith(data);
},
'html');
return false;
});
</script>
的TableView
<table id="table">
<% foreach (var row in Model) { %>
<tr>
...
</tr>
<% } %>
</table>
你不能用一個類似[Authorize(Roles =「Admin」)]的授權標籤來修飾你的控制器動作。只有此角色的用戶才能插入該行。 JQuery可以調用控制器方法。 – Davy 2009-10-13 13:25:08