防止在Ajax.BeginForm上重新加载

Dus*_*ski 2 ajax asp.net-mvc ajax.beginform razor

在部分视图中提交表单时,如何防止页面重新加载?有很多例子,但似乎没有一个例子对我有用。这就是我所拥有的。局部视图(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>
}
Run Code Online (Sandbox Code Playgroud)

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

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

}
Run Code Online (Sandbox Code Playgroud)

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

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

如何在ASP.NET MVC 3中将Razor View呈现为字符串?

除了其他我尝试过的东西:

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

我将不胜感激任何帮助。

Dus*_*ski 6

我发现了问题。

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

安装包Microsoft.jQuery.Unobtrusive.Ajax

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

<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

奇迹般地,它无需任何其他更改即可工作。可以在这里找到更多说明:

[ 为什么Ajax.BeginForm替换我的整个页面?

和这里:

[ 为什么UnobtrusiveJavaScriptEnabled = true禁用我的Ajax正常工作?

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