asp.net mvc json打开对话框问题

时间:2010-06-02 10:42:43

标签: asp.net javascript ajax json

 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);  
    }

好的问题是,在运行要求保存文件的代码后,对话框才会打开。 有人能告诉我如何解决这个问题吗?为什么这个盒子毕竟出现了?

2 个答案:

答案 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") %>),您将从减少带宽和缓存中受益静态资源。