问题:阻止用户使用浏览器的向后和向前功能。
使用:MVC 3 C# Microsoft Visual Studio 2010 .net framework 4.0 unobtrusive-ajax
我有一个使用 Html.BeginForm 和朋友以普通的书外方式使用 MVC3 应用程序,控制器方法将不同的模型对象作为参数等等。一切正常,除了用户能够通过使用浏览器的向后和向前导航可能性来阻碍预期的功能流程。最重要的是,这在这个特定的应用程序中是不可能的。
到目前为止,我已经通过使用自制的 FSM(有限状态机)“解决”了这个问题,该 FSM 拦截尝试选择与用户状态不兼容的操作,方法是将她发送回应用程序的开头,并显示她的消息无法使用浏览器导航。这真的不是很用户友好:-)
我现在正在尝试使用 unobtrusive-ajax 来解决我的问题(Ajax.BeginForm)。一切正常,直到我尝试像使用 Html.BeginForm 一样来回转换模型数据。我还使用 view/viewmodel/CustomValidation 围绕模型和服务器端验证有很多现有的程序代码,我想将其保留在可能的 Ajax 解决方案变体中。
这个开始的计划很好地工作(细节被剥离):
CommandDispatcher.cshtml 查看:
@using (Ajax.BeginForm("CommandDispatcher", "Adm", new AjaxOptions{ UpdateTargetId = "result" }))
{
<div id="result">
@Html.Partial("SomeAction001") @* Only run the first time *@
</div>
}
SomeAction001.cshtml 局部视图:
<input type="submit" id="SomeAction001" name="SomeAction001" value="SomeAction001" />
SomeAction002.cshtml 局部视图:
<input type="submit" id="SomeAction002" name="SomeAction002" value="SomeAction002" />
控制器:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult StartCommandDispatcher()
{
return View("CommandDispatcher");
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CommandDispatcher()
{
string action = translateToAction(Request);
return findPartialView(action);
}
private static string translateToAction(HttpRequestBase request)
{
string action = <find out which push button has been pressed and translate that to a known action>;
return action;
}
private ActionResult findPartialView(string action)
{
string partialViewName = <look up a dictionary or something>;
ActionResult ar = PartialView(partialViewName);
return ar;
}
为了让这个场景也使用其中的数据:-),我需要添加模型渲染和验证功能。
将模型发送到浏览器是没有问题的,例如在局部视图中添加以下内容:@Html.Raw((model as MyViewModel).Field1)
它按希望和预期的方式呈现。我认为的问题是从浏览器到控制器的方向。
如何引入这样的功能?