【问题标题】:MVC3 Remote Attribute - validationMVC3 远程属性 - 验证
【发布时间】:2011-01-29 06:38:36
【问题描述】:

我有一个班级管理员:

    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);

}

但是字符串 Username 始终为 null,因为发送到 Action 的内容是这样的:

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

问题是 UsernameAvailable 在 http 查询中发送 Admin.Username 值而不是 Username 值。我将如何使用视图模型来做到这一点?

谢谢

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3


    【解决方案1】:

    您可以为默认模型绑定器指定一个前缀:

    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
    

    【讨论】:

    • 我会推荐第二种方法,基本上认为它只是另一种操作方法,在这种情况下,默认模型绑定器将绑定 Admin,而不是用户名字符串。
    • 那行得通。但是我必须像这样绑定到“AdminViewModel”而不是“Admin”:public ActionResult UsernameAvailable(AdminsEditViewModel row)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多