Asp.net MVC JSON Открыть диалоговое окно проблема - PullRequest
0 голосов
/ 02 июня 2010
 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 ]

1 голос
/ 09 июня 2010

Вам нужно отменить отправку формы по умолчанию, вернув false внутри кнопки onclick handler:

<input type="submit" onclick="postForm(); return false;" />

При этом я бы предложил вам лучшее решение. Используйте плагин jquery.form , который позволяет вам изменить форму HTML. Таким образом, большая часть дублирования в вашем коде может быть упрощена:

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, метод, вручную сериализовать поля формы и т. Д. Вам также не нужно загрязнять вашу HTML-разметку функциями javascript. Это ненавязчивый JavaScript. Еще одним преимуществом этого подхода является то, что теперь вы сможете выводить этот javascript в отдельный статический файл .js, так как он больше не зависит от кода на стороне сервера (<%= Url.Action("JSONRequest","Home") %>), и вы получите выгоду от уменьшения пропускной способности и кэширования статических ресурсов. .

1 голос
/ 02 июня 2010

Я думаю, что вы публикуете форму дважды. Вы должны использовать 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" />  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...