我有以下代码,但自定义类型(UserDetails
)的验证未触发。有没有办法克服这个问题?我知道,如果我在UserDetails
内定义UserModel
的所有属性,它将正常工作。但我需要重复使用UserDetails
模型,
public class UserModel
{
public string Something { get; set; }
public UserDetails User { get; set; }
}
自定义对象
public class UserDetails
{
[Required]
public string FirtstName { get; set; }
[Required]
public string LastName { get; set; }
[StringLength(50, ErrorMessage = "{0} can not be greater than {1} characters")]
public string Address { get; set; }
}
查看,
@Html.ValidationSummary(true)
@Html.TextAreaFor(model => model.UserDetails.Address , new { rows = "5", cols = "20"})
@Html.ValidationMessageFor(model => model.UserDetails.Address )
....
答案 0 :(得分:0)
如果您正在谈论客户端验证 - 请确保您的视图代码放在
中@using(Html.BeginForm(...))
{
...
}
阻止您启用客户端验证,例如@{Html.EnableClientValidation(); }
即
@using (Html.BeginForm())
{
@{ Html.EnableClientValidation(); }
@Html.ValidationSummary(true, "Password change was unsuccessful")
<fieldset>
<legend>Change Password Form</legend>
<ol>
<li>
@Html.LabelFor(m => m.OldPassword)
@Html.PasswordFor(m => m.OldPassword)
@Html.ValidationMessageFor(m => m.OldPassword)
..............
至于触发服务器端验证 - 你应该在你的行动中调用Model.IsValid
编辑:
记住别的东西: 尝试将[Required] attibute放在UserModel中的User属性
上答案 1 :(得分:0)
为什么不创建自己的验证规则。你可以使用Ivalidatable Object。检查这个链接,它有很好的解释
答案 2 :(得分:0)
这只是因为元素的ID和名称。例如,在这种情况下,FirtstName控件的名称为UserModel.FirtstName
,ID为UserModel_FirtstName
,因此在这种情况下不会触发客户端验证。如果要添加验证,则必须手动添加客户端验证。但您可以使用ModelState.IsValid
if (!ModelState.IsValid)
{
if( ModelState.IsValidField("UserDetails.FirstName"))
{
ModelState.AddModelError("UserDetails.FirstName", "Error in save");
}
......
}
客户端验证
$("form").validate({
rules: {
"UserDetails.FirstName": { required: true }
}
});