2010-06-02 3 views
0
function postForm() 

{asp.net диалогового окна открытого MVC JSON проблема

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

Ok проблема в том, что диалоговое окно открывается после выполнения этого кода, который просит, чтобы сохранить файл. Может ли кто-нибудь сказать мне, как решить эту проблему? Почему эта коробка появляется после всего?

ответ

1

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

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

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

+0

для ссылки на другие ссылки jquery form плагин решает мою проблему – maztt

1

Я думаю, что вы публикуете форму дважды. Вы должны использовать Ajax.BeginForm вместо нормальной формы. И удалите вызов jQuery Ajax.

Вот очень хороший пример использования формы Ajax.

http://davidhayden.com/blog/dave/archive/2009/05/19/ASPNETMVCAjaxBeginForm.aspx

Или вы можете попробовать, заменив

<input type="submit" onclick="postForm" /> 

с

<input type="button" onclick="postForm" /> 
Смежные вопросы