防止在Ajax.BeginForm上重新加载

时间:2015-04-29 11:51:48

标签: ajax asp.net-mvc razor ajax.beginform

如何在部分视图中提交表单时阻止页面重新加载?有很多例子,但似乎没有它们对我有用。这就是我所拥有的。部分视图(Razor)称之为:

@using (Ajax.BeginForm("SaveReply", "Home", null, new AjaxOptions { HttpMethod = "Post" }, new { target = "_self" }))
{
    <div class="input-group wall-comment-reply" style="width:100%">
        @Html.Hidden("eventid", @item.EventID)
        <input name="txtReply" type="text" class="form-control" placeholder="Type your message here...">
        <span class="input-group-btn">
            <button class="btn btn-primary" id="btn-chat" type="submit">
                <i class="fa fa-reply"></i> Reply
            </button>
        </span>
    </div>
}

然后我在控制器中有我的动作方法:

[HttpPost]
public void SaveReply(string txtReply, string eventid)
{
    //some code

}

触发了控制器操作,但之后它会自动重定向到localhost / home / SaveReply

也许问题是这个局部视图是从字符串渲染的。我从以下代码中获取了代码:

How to render a Razor View to a string in ASP.NET MVC 3?

还有其他事情我试过这个:

http://geekswithblogs.net/blachniet/archive/2011/08/03/walkthrough-updating-partial-views-with-unobtrusive-ajax-in-mvc-3.aspx

我将不胜感激。

1 个答案:

答案 0 :(得分:5)

我发现了问题。

您似乎需要引用Unobtrusive脚本。只需从NuGet安装它们:

Install-Package Microsoft.jQuery.Unobtrusive.Ajax

然后从调用部分视图的视图中引用它:

<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>

奇迹般地,它没有任何其他变化。可以在这里找到更多解释:

[Why does Ajax.BeginForm replace my whole page?

在这里:

[Why UnobtrusiveJavaScriptEnabled = true disable my ajax to work?

如果您在MVC 3及更高版本中使用Ajax。*帮助程序,似乎需要使用它。