2011-01-28 112 views
3

我有一個類管理:MVC3遠程屬性 - 驗證

public class Admin 
    { 
     public virtual int AdminId { get; set; } 

     [Remote("UsernameAvailable", "Admins")] 
     [Display(Name = "lblUsername", ResourceType = typeof(Resources.Admin.Controllers.Admins))] 
     public virtual string Username { get; set; } 
... 

然後我的影片用於視圖視圖模型類:

public class AdminsEditViewModel 
    { 

     public Admin Admin { get; set; } 

     public IEnumerable<SelectListItem> SelectAdminsInGroup { get; set; } 
... 

控制器:

public ActionResult UsernameAvailable(string Username) 
{ 
    return Json(this.AdminRepository.GetLoginByUsername(Username), JsonRequestBehavior.AllowGet); 

} 

然而字符串用戶名始終爲空,因爲發送給Action的內容是:

http://localhost/admin/admins/usernameavailable?Admin.Username=ferwf 

問題是,UsernameAvailable在http查詢中發送Admin.Username值和NOT用戶名值。我如何使用視圖模型來做到這一點?

感謝

回答

5

你可以指定一個前綴爲默認的模型綁定:

public ActionResult UsernameAvailable([Bind(Prefix = "Admin")]string username) 
{ 
    return Json(
     this.AdminRepository.GetLoginByUsername(username), 
     JsonRequestBehavior.AllowGet 
    ); 
} 

或使用Admin型號:

public ActionResult UsernameAvailable(Admin admin) 
{ 
    return Json(
     this.AdminRepository.GetLoginByUsername(admin.Username), 
     JsonRequestBehavior.AllowGet 
    ); 
} 

現在username參數將被正確綁定假設以下請求:

http://localhost/admin/admins/usernameavailable?Admin.Username=ferwf 
+0

我會推薦第二種方法,基本上認爲它只是另一種操作方法,在這種情況下,默認的模型綁定器會綁定Admin,而不是用戶名字符串。 – 2011-01-28 23:59:34