Ajax.BeginForm似乎重定向动作完成

时间:2012-11-19 04:43:52

标签: c# .net ajax asp.net-mvc-3

我目前正在开发一个.net mvc 3应用程序。这是问题所在。出于某种原因,虽然我正在使用Ajax.BeginForm并且正在调用正确的操作,但在操作完成后,它正在尝试重定向到另一个不存在的页面。但是,我希望它保持在同一页面上,只需使用ajax提交表单,并在操作完成后向用户返回一些友好消息。

这是我的Ajax.BeginForm页面:

@using (Ajax.BeginForm("Action", "Controller", new AjaxOptions { HttpMethod = "Post" }))
{
    <div id="lnkContainer"><a href="#" onclick="javascript:document.forms[0].submit(); return false;">Update</a>&nbsp;</div>
    @Html.TextAreaFor(m => m.Message, new { style = "width:575px" })
}

这是我的行动:

[Authorize]
[AcceptVerbs(HttpVerbs.Post)]
public PartialViewResult Action(ActionModel actionModel)
{
database-related code
.....
database-related code

return PartialView(); 
}

2 个答案:

答案 0 :(得分:1)

我很确定你的问题出在onclick="javascript:document.forms[0].submit();"。这将提交表单作为普通的POST请求。如果您想使用@Ajax.BeginForm帮助程序,请使用常规<input type="submit">来触发提交。如果你真的需要使用链接,那么使用@Ajax.BeginForm确实无关紧要,因为你必须使用jQuery等代码提交Ajax请求。

Ajax.BeginForm和重定向而言,如果用户在浏览器中禁用了javascript,或者您缺少相应的脚本等,表单将恢复为普通的HTML表单。

答案 1 :(得分:0)

我遇到了同样的问题,我通过在 BundleConfig.cs 中添加以下代码解决了该问题 bundles.Add(new ScriptBundle("~/bundles/jqueryajax").Include( "~/Scripts/jquery.unobtrusive-ajax.js"));

,然后是 _Layout.cshtml

中的以下代码

@Scripts.Render("~/bundles/jqueryajax")