2011-03-03 60 views
0

ajax post在提交表單時是否支持通常的驗證?ajax表單和驗證的帖子

@using(Html.BeginForm()){ 
@Hml.ValidationSummary() 

<input type="submit" value ="Save"> 
} 

一樣

@using(Html.BeginForm(new {id=FormTest})){ 
    @Hml.ValidationSummary() 
<input type="button" value= Save> 
    } 

<script type="javascript"> 
$("#Save").click(function(){ 
$("#FormTest").submit(); 

}); 
</script> 
+0

是的,它支持驗證。 – 2011-03-03 10:45:20

+0

我該如何顯示錯誤信息? – learning 2011-03-03 11:27:52

+0

啓用客戶端驗證? – 2011-03-03 11:43:37

回答

1

有這麼多的錯誤的東西怎麼回事,我真的不知道從哪裏開始。

  1. Html.BeginForm定義是錯誤的:你與htmlAttributes混淆routeValues。請參閱下面的解決方案

  2. 您的按鈕沒有一個ID,這樣你的JavaScript選擇最有可能失敗

  3. ,因爲一個簡單的<input type="submit">按鈕不開箱的所有這些努力都是沒有必要的。

現在讓我們假設你是JavaScript的粉絲,你想寫它(我不知道你爲什麼要寫代碼,但無論如何)。因此,通過固定的形式定義開始:

@using(Html.BeginForm("someAction", "someController", FormMethod.Post, new { id = "FormTest" }))  
{ 
    @Html.ValidationSummary() 
    @Html.TextBoxFor(x => x.Foo) 

    <input type="button" value="Save" id="Save" /> 
} 

,然後你可以這樣做:

$('#Save').click(function() { 
    var form = $('#FormTest'); 
    if (form.valid()) { 
     form.submit(); 
    } 
}); 

很明顯,你必須確保客戶端腳本已經適當地包括在頁面上:

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> 

當然,我建議你的真正解決方案是使用提交按鈕來提交表單:

@using(Html.BeginForm("someAction", "someController", FormMethod.Post, new { id = "FormTest" }))  
{ 
    @Html.ValidationSummary() 
    @Html.TextBoxFor(x => x.Foo) 

    <input type="submit" value="Save" id="Save" /> 
} 

現在你不需要任何javascript(顯然你仍然需要兩個腳本包含進行不顯眼的驗證)。