正如@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