如何在部分视图中提交表单时阻止页面重新加载?有很多例子,但似乎没有它们对我有用。这就是我所拥有的。部分视图(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?
还有其他事情我试过这个:
我将不胜感激。
答案 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。*帮助程序,似乎需要使用它。