参数必须与要验证的字段的名称匹配:User.Username

时间:2013-08-11 10:02:09

标签: asp.net-mvc-3 jquery-validate unobtrusive-validation

作为标题,我使用远程验证来验证用户名字段。但Html中字段的名称为User.Username。如何传递名称为点User dot Username的参数。如果不使用带有匹配字段名称的参数。验证不起作用?任何人都可以提供解决方案吗?

UPDATE SOURCE CODE:

这是我的行动方法:

public JsonResult ValidateUsername(string Username)
    {
        var user = IUserRepo.GetUserByUrName(Username);
        if (user!=null)
        {
            return Json("Vui lòng chọn tên khác, tên đăng nhập đã tồn tại.",JsonRequestBehavior.AllowGet);
        }
        return Json(true,JsonRequestBehavior.AllowGet);
    }

要在实体中有效的属性:

    [Required(ErrorMessage="Tên đăng nhập không được rỗng.")]
    [StringLength(10,ErrorMessage="Tên đăng nhập không được vượt quá 10 ký tự.")]
    [RegularExpression(@"(\S)+", ErrorMessage = "Không được có khoảng trắng.")]
    [Remote("ValidateUsername", "Account")]
    public string Username { get; set; }

观点:

 <tr>
                    <td class="info_label">Tên đăng nhập</td>
                    <td>@Html.EditorFor(m => m.User.Username)
                    </td>
                    <td class="check_user">@Html.ValidationMessageFor(m => m.User.Username)</td>
                </tr>

firebug中的视图名称为User.Username,但参数传递给操作方法为Username。它不匹配,因此它是字段未调用或有效的原因。如何将User.Username作为参数传递?

1 个答案:

答案 0 :(得分:0)

你必须使用MVC的模型绑定功能,只需要像

这样的形式
 <input type='text' name='User.Username' value='' /> 
 <input type='password' name='User.Password' value='' />

您可以将登录方法设为帐户,或者您必须使用其他任何控制器

public ActionResult Logon(User userDetails){
     if(Validate(userDetails)){
         // allow the access to the app
     }
     else {
          //return the logon view with the appropriate model state error messages
     }
}

如果您需要通过Ajax将数据发布到action方法,可以使用如下所示

function ValidateUserName(){
var user = {};

user.UserName=$("#userName").val();


$.ajax({
// other defaults here
data: JSON.stringify(user);
contentType:"application/json",
// other defaults here
});
}