2012-10-09 87 views
3

我有一個創建用戶視圖(行動),除了某些字段類型的客戶端驗證,日期,emailaddress等我想檢查一對夫婦例如emailaddress和用戶名是通過調用幾個獨特的服務器控制選項。MVC AJAX屬性驗證

我原以爲最好能夠掛鉤到現有的MVC驗證機制中來調用這些ajax函數。所有當表單驗證發生時,它會調用我的ajax驗證器,並且在modelstate.isvalid中反映了這一點,並且在默認的html.validation助手中顯示任何錯誤。

我不確定這是可能的,還是我需要單獨處理自己的驗證?目前我已經創建了幾個jquery函數,這些函數調用一些控制器操作,並在我添加的幾個跨度中顯示用戶名和電子郵件地址的有效性狀態。

MVC的最佳模式是什麼?我考慮纏繞在上述各字段的在一個單獨的@ Ajax.BeginForm(

回答

4

有內置在遠程驗證在Asp.Net MVC的可能的方法

在模型:

public class CreateUserModel 
{ 
    [Remote("IsNameAvailable", "Validation")] 
    public override string UserName { get; set; } 
} 

在控制器:

public class ValidationController : Controller 
{ 
    public JsonResult IsNameAvailable(string Username) 
    { 
     ... Do some checks 
     return Json({some validation message here}, JsonRequestBehavior.AllowGet); 
    } 

} 
+0

聽起來很理想,那麼這種驗證何時發生在這種情況下呢?除了表格發佈之外,它可以被稱爲失去焦點嗎? – Tim

+0

在表格上提交AFAIK。它使用jQuery不顯眼的驗證,所以在標記中,這個東西看起來像:data-val-remote =「' UserName '」是無效的。 data-val-remote-additionalfields =「*。UserName」data-val-remote-url =「/ Validation/IsNameAvailable」。你也可以明確地在窗體上調用驗證。它是jQuery.Validation的一部分。 –