确实如此。您必须忘记持久性是由视图状态构成的。
您还必须在脑海中将回发转换为页面以“调用控制器”。这样以后事情会更容易理解。您调用的是返回视图的控制器,而不是调用 page 。因此,您要么在每次通话中一次又一次地构建您的整个“页面”,要么您决定只处理受该操作真正影响的内容。如果按钮正在更改 div,为什么要重新加载整个页面。只需让您调用控制器并返回 div 中的新数据即可。
例如,让我们想象一个主/细节场景:
<h2>Groups</h2>
<div id="GroupList">
</div>
<div id="GroupDetail" title="Detail Group">
</div>
组列表在 div 中加载一次,然后
是否可以对组列表中的每个项目的控制器进行 ajax 调用:
<%= Ajax.ActionLink("Edit", "DetailLocalisationGroup",
new { id = group.Id },
new AjaxOptions() {
UpdateTargetId = "DetailLocalisationGroup",
OnSuccess = "InitialisationDetailGroup" })%>
调用这个动作 DetailLocalisationGroup 来为 div GroupDetail 提供 html。
[AcceptVerbs("POST")]
public ActionResult DetailLocalisationGroup(int id)
{
LocalisationGroup group = servicelocalisation.GetLocalisationGroup(id);
return View("DetailGroup", group);
}
现在 div 中有一个表单,当按下这个表单的提交按钮时,我们只是将我们真正需要的信息发送到控制器,然后控制器会将数据保存到数据库中。
在所有这些事件中,GroupList 充满了显示在客户端屏幕上的内容,但那里不需要交互,所以为什么要为这些事件的视图状态烦恼...