2011-01-28 106 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