function postForm()
{
$.ajax({
type: "POST",
data: $("#myForm").serialize(),
dataType: "json",
url: '<%= Url.Action("JSONRequest","Home") %>',
success: function(result)
{
window.alert(result.name);
},
error : function()
{
window.alert('error');
}
});
}
Html.BeginForm("JSONRequest", "Home", FormMethod.Post, new { id = "myForm" });
Html.TextBox("mazhar")
<input type="submit" onclick="postForm" />
Html.EndForm();
public ActionResult JSONRequest(FormCollection form)
{
string a = form["mazhar"];
var data = new { name = "aaaa", Success = "Record is Succesfully Saved", ErrorMessages = "abc" };
return Json(data);
}
好的问题是,在运行要求保存文件的代码后,对话框才会打开。 有人能告诉我如何解决这个问题吗?为什么这个盒子毕竟出现了?
答案 0 :(得分:1)
我认为您要两次发布表单。您应该使用Ajax.BeginForm而不是普通形式。并删除jQuery Ajax调用。
这是使用Ajax Form的一个很好的例子。
http://davidhayden.com/blog/dave/archive/2009/05/19/ASPNETMVCAjaxBeginForm.aspx
或者您也可以尝试替换
<input type="submit" onclick="postForm" />
与
<input type="button" onclick="postForm" />
答案 1 :(得分:1)
您需要在按钮false
处理程序中返回onclick
来取消默认表单提交:
<input type="submit" onclick="postForm(); return false;" />
话虽这么说,我建议你一个更好的解决方案。使用jquery.form插件,您可以使HTML表单ajaxify。这样可以简化代码中的大部分重复:
Html.BeginForm("JSONRequest", "Home", FormMethod.Post, new { id = "myForm" });
Html.TextBox("mazhar")
<input type="submit" value="OK" />
Html.EndForm();
在javascript中:
$(function() {
$('#myForm').ajaxForm({
success: function(result) {
window.alert(result.name);
},
error : function() {
window.alert('error');
}
});
});
这样您就不再需要指定url,方法,手动序列化表单字段等...您也不需要使用javascript函数污染您的HTML标记。这是不引人注目的JavaScript。这种方法的另一个优点是,现在您可以将此javascript外部化为单独的静态.js文件,因为它不再依赖于服务器端代码(<%= Url.Action("JSONRequest","Home") %>
),您将从减少带宽和缓存中受益静态资源。