【发布时间】:2013-11-09 18:28:19
【问题描述】:
我的问题类似于this question,但我仍然在服务器端和客户端的验证方面遇到问题。我想对设置在不同模型中的两个属性进行比较。
我的模型如下:
public class User{
public string Password { get; set; }
}
public class UserRegisterViewModel {
public User User{ get; set; }
//This is suggested in linked question - as Compare can only work with local property
public string Password
{
get{return this.User.Password;}
}
[DataType(DataType.Password)]
[Compare("Password", ErrorMessage = "Passwords must match")]
[Required(ErrorMessage = "Confirm password is required")]
[DisplayName("Confirm Password")]
public string CPassword { get; set; }
}
我的控制器操作是:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(UserRegisterViewModel model)
{
if (ModelState.IsValid) //This conditions is false
{
}
return View();
}
它重定向到再次注册页面,验证错误为Password must match。有人可以帮忙吗?我检查了this question 它有点帮助,但不是完全。
如果我像下面这样更改模型结构,则会收到错误消息:Could not find a property named User.Password:
public class UserRegisterViewModel {
public User User{ get; set; }
[DataType(DataType.Password)]
[Compare("User.Password", ErrorMessage = "Passwords must match")]
[Required(ErrorMessage = "Confirm password is required")]
[DisplayName("Confirm Password")]
public string CPassword { get; set; }
}
编辑
我的cshtml页面代码如下。
<p>
@Html.LabelFor(model => model.User.Password)
@Html.PasswordFor(model => model.User.Password, new { @class = "wd189 inputtext" })
@Html.ValidationMessageFor(model => model.User.Password)
</p>
<p>
@Html.LabelFor(model => model.CPassword)
@Html.PasswordFor(model => model.CPassword, new { @class = "wd189 inputtext" })
@Html.ValidationMessageFor(model => model.CPassword)
</p>
【问题讨论】:
-
您能否发布您的视图代码和您的
Register操作结果的HttpGet? -
@bump 添加了 View 的代码,如何获取 httpget ?对不起,我是菜鸟,但我是新手。
-
但是您组织 UserRegisterViewModel 的方式(使用
[Compare("User.Password", ErrorMessage = "Passwords must match")]是您链接中的确切问题已经提供(另一个问题)。这就是为什么在那里另外引入了一些附加属性“密码”的原因。 -
因此,如果我这样做,我会收到不同的错误消息,提示密码在服务器端不匹配,更新的问题有错误,但在这两种情况下它都适用于客户端。
-
实际上,我刚刚尝试了完全相同的代码(第一个块),它在服务器端运行良好。模型验证正确。 (至于密码)。
标签: c# asp.net-mvc validation asp.net-mvc-4