在ASP.NET中,带有AJAX的POST/Redirect/GET序列两次命中重定向到操作
在视图中,我有以下内容:在ASP.NET中,带有AJAX的POST/Redirect/GET序列两次命中重定向到操作,asp.net,jquery,Asp.net,Jquery,在视图中,我有以下内容: @using (Html.BeginForm()) { <input type="submit" id="savebtn" value="Save" onclick="saveLayout()"/> } <script type="text/javascript"> function saveLayout() { $.ajax({ url: '/Page/SaveFaces/',
@using (Html.BeginForm())
{
<input type="submit" id="savebtn" value="Save" onclick="saveLayout()"/>
}
<script type="text/javascript">
function saveLayout() {
$.ajax({
url: '/Page/SaveFaces/',
data: {
/* layout data of the page, irrelevant */
},
type: 'post',
success: function () {
}
});
return false;
}
</script>
然后,由于重定向,我们回到这个非常标准的模型获取操作:
public ActionResult Index(int id = 0)
{
var page = db.Pages.Find(id);
if (page == null) return HttpNotFound();
return View(page);
}
问题是,最后一个操作被调用了两次
我尝试过删除AJAX调用并执行正常的POST操作,问题就消失了。然而,我试图发送的数据只能通过jQuery脚本获取,我无法将它们放入表单中。我不得不使用AJAX方法
我可以做些什么来防止操作被击中两次吗?我看到您正在使用
jQuery
。你能试试这个吗?(注意,您可能需要绑定表单
提交事件,而不是输入按钮,或者两者都绑定)
@使用(Html.BeginForm())
{
}
$(“#savebtn”).submit(函数saveLayout(事件){
//阻止post的魔力。
event.preventDefault();
$.ajax({
url:“/Page/SaveFaces/”,
数据:{
/*页面的布局数据,不相关*/
},
键入:“post”,
成功:函数(){
}
});
返回false;
}
另外,如果您有权访问表单元素,另一种方式:
<form onsubmit="javascript: return false;">
虽然它可能有点特定于我的场景,但我刚刚找到了一个可接受的解决方案。由于所有数据都是通过jQuery提供的,所以我完全删除了表单,并用一个简单的链接替换了submit按钮 所以,这就消失了:
@using (Html.BeginForm())
{
<input type="submit" id="savebtn" value="Save" />
}
@使用(Html.BeginForm())
{
}
这一点已经落实到位:
<a onclick="saveLayout()" id="saveLink">Click to save.</a>
点击保存。
现在,
[HttpPost]
操作被命中,数据被保存,重定向到操作的操作也被命中一次。事实上,我正在使用jQuery。我尝试过你的方法,但现在当我单击按钮时脚本根本不运行。可能使用
代替。单击()
事件代替。提交()
?
@using (Html.BeginForm())
{
<input type="submit" id="savebtn" value="Save" />
}
<a onclick="saveLayout()" id="saveLink">Click to save.</a>