2011-03-04 55 views
21

對不起,如果這已被問到,但我一直在尋找一段時間,但我所發現的都是相當老的帖子(mvc1,mvc2)。 我有一個我想通過Ajax提交的表單。asp.net mvc 3 - ajax表單提交和驗證

This看起來像它會工作,但不包括服務器端驗證。

1)我不確定我是否應該使用AjaxHelper.BeginForm或使用原始jQuery調用($.ajax)?這裏推薦的方法是什麼?

2)我如何處理客戶端和服務器端驗證?我希望mvc框架提供了一個內置的機制來處理這個問題? 有一些驗證,我只做服務器端。會使用ValidationSummary仍然在這裏工作?

我正在使用asp.net mvc3/razor with unobtrussive javascript驗證。

謝謝!

編輯:(按照Bobby B的要求)。

<script type="text/javascript"> 

function ajaxValidate() { 
    return $('form').validate().form(); 
} 

function getGbPostSuccess(ajaxContext){ 
    // .... it is not necessary to do anything here. 
} 
function showFaliure(ajaxContext){ 
    // handle failure 
} 

HTML片段:

這是問了一個問題,用戶想知道如何使用AjaxHelper

這是JavaScript代碼,我用後添加個月

@using (Ajax.BeginForm("Index", "Home", new AjaxOptions 
         { 
          UpdateTargetId = "form1", 
          InsertionMode = InsertionMode.Replace, 
          OnBegin = "ajaxValidate", 
          OnSuccess = "getGbPostSuccess", 
          OnFailure = "showFaliure" 
         })) 
{ 

回答

8

我一直在使用malsup's jQuery form plugin一會兒用於這一目的。我真的不熟悉AjaxHelper,但看起來它會做你想要的。就進行客戶端和服務器端驗證而言,只要您使用模型綁定和來自System.DataAnnotations名稱空間的屬性,這些都應該大部分都是自動發生的。

public class MyModel 
{ 
    [Required(ErrorMessage = "Please enter your name")] 
    public String Name { get; set; } 

    [Required(ErrorMessage = "Please enter your email")] 
    public String Email { get; set; } 

    [Required(ErrorMessage = "Please enter a rating")] 
    [Range(1, 5, ErrorMessage = "The rating must be between 1 and 5")] 
    public Int32 Rating { get; set; } 
} 

[HttpPost] 
public ActionResult Index(MyModel myModel) 
{ 
    if(ModelState.IsValid) 
    { 
     // good to go, put it in the DB or whatever you need to do 
    } 
    else 
    { 
     return View(model); // return the user back to the page, ModelState errors can be viewed using Html.ValidationSummary() or individual Html.ValidationMessageFor() calls 
    } 
} 

如果你做你自己的自定義服務器端驗證,你可以通過創建實現ValidationAttribute屬性創建自己的自定義驗證屬性,或者只是通過調用ModelState.Errors.Add添加驗證錯誤( )(或附近的東西,我沒有參考資料)

對於客戶端,MVC將根據模型上的DataAnnotations屬性爲您生成客戶端驗證。

+0

謝謝!我現在正在工作。我結束了使用AjaxHelper。 – santiagoIT

+0

你有沒有機會詳細說明你如何使用AjaxHelper?我自己面臨着同樣的問題,我正在試圖決定採取什麼最好的方法。謝謝! –

+0

我將添加示例代碼作爲對問題的編輯。這樣我可以更好地格式化;-) – santiagoIT

1

MVC.NET 3已經有了這個開箱即用的功能。只要確保在web.config中啓用了ClientValidationEnabled。檢查this

+0

我檢出了鏈接,但它解釋瞭如何啓用客戶端驗證。我確實啓用了客戶端驗證,這不幸並不是我的問題。 – santiagoIT