【问题标题】:ASP.NET MVC3 Compare Validation not worked properlyASP.NET MVC3 比较验证无法正常工作
【发布时间】:2012-07-29 07:18:29
【问题描述】:

假设这个模型:

    public class ChangePasswordModel {
    [Required(ErrorMessage = CustomRegex.RequiredErMsg)]
    [DataType(DataType.Password)]
    [Display(Name = "Current password")]
    public string OldPassword { get; set; }

    [Required(ErrorMessage = CustomRegex.RequiredErMsg)]
    [RegularExpression(CustomRegex.PasswordRX, ErrorMessage = CustomRegex.PasswordErMsg)]
    [DataType(DataType.Password)]
    [Display(Name = "New password")]
    public string NewPassword { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm new password")]
    [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}

好的,一切都与这个视图完美配合:

@model ChangePasswordModel
@{
ViewBag.Title = "Profile";
}

@using (Html.BeginForm()) {
            @Html.ValidationSummary(true)
            <fieldset>
                <legend>Change Password</legend>
                <dl>
                    <dt>@Html.LabelFor(model => model.OldPassword)</dt>
                    <dd>
                        @Html.EditorFor(model => model.OldPassword)
                        @Html.ValidationMessageFor(model => model.OldPassword, null, new { @class = "invalid-side-note" })
                    </dd>
                    <dt>@Html.LabelFor(model => model.NewPassword)</dt>
                    <dd>
                        @Html.EditorFor(model => model.NewPassword)
                        @Html.ValidationMessageFor(model => model.NewPassword, null, new { @class = "invalid-side-note" })
                    </dd>
                    <dt>@Html.LabelFor(model => model.ConfirmPassword)</dt>
                    <dd>
                        @Html.EditorFor(model => model.ConfirmPassword)
                        @Html.ValidationMessageFor(model => model.ConfirmPassword, null, new { @class = "invalid-side-note" })
                    </dd>
                </dl>
                <input type="submit" value="Save" class="button red inframebutton" />
            </fieldset>
}

所以我需要使用一些通用模型:

    public class ViewModel<T> {

    public T MainModel { get; set; }
    public ViewPart ViewPart { get; set; }
    }

然后我通过查看这个通用视图并将视图更改为:

@model ViewModel<ChangePasswordModel>
@using (Html.BeginForm()) {
            @Html.ValidationSummary(true)
            <fieldset>
                <legend>Change Password</legend>
                <dl>
                    <dt>@Html.LabelFor(model => model.MainModel.OldPassword)</dt>
                    <dd>
                        @Html.EditorFor(model => model.MainModel.OldPassword)
                        @Html.ValidationMessageFor(model => model.MainModel.OldPassword, null, new { @class = "invalid-side-note" })
                    </dd>
                    <dt>@Html.LabelFor(model => model.MainModel.NewPassword)</dt>
                    <dd>
                        @Html.EditorFor(model => model.MainModel.NewPassword)
                        @Html.ValidationMessageFor(model => model.MainModel.NewPassword, null, new { @class = "invalid-side-note" })
                    </dd>
                    <dt>@Html.LabelFor(model => model.MainModel.ConfirmPassword)</dt>
                    <dd>
                        @Html.EditorFor(model => model.MainModel.ConfirmPassword)
                        @Html.ValidationMessageFor(model => model.MainModel.ConfirmPassword, null, new { @class = "invalid-side-note" })
                    </dd>
                </dl>
                    <input type="submit" value="Save" class="button red inframebutton" />
            </fieldset>
}

然后我遇到了 compare 验证问题,正如您在模型比较验证中看到的,必须将 ConfirmPasswordNewPassword 进行比较,但有了这个新的变化,ConfirmPasswordOldPassword 相比,这太连贯了。我认为这可能是因为元素的名称或 ID 发生了变化,所以我尝试了

[Compare("MainModel.NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]

[Compare("MainModel_NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]

但没有一个不起作用,有什么问题?以及如何使用此新模型进行比较验证?有什么办法吗?

【问题讨论】:

标签: asp.net-mvc asp.net-mvc-3 client-side-validation


【解决方案1】:

你没有参考脚本,下面我修改了编码

型号:

    //[Required(ErrorMessage = "CustomRegex.RequiredErMsg")]
       [Required(ErrorMessage = "Current password is Required")]
    [DataType(DataType.Password)]
    [Display(Name = "Current password")]
    public string OldPassword { get; set; }


      [Required(ErrorMessage = "New password is Required")]
    [DataType(DataType.Password)]
    [Display(Name = "New password")]
    public string NewPassword { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm new password")]
    [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
    }

查看:

@model test.Models.password

<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>

@using (Html.BeginForm()) 

{

            <fieldset>
                <legend>Change Password</legend>
                <dl>
                    <dt>@Html.LabelFor(model => model.OldPassword)</dt>
                    <dd>
                        @Html.EditorFor(model => model.OldPassword)
                        @Html.ValidationMessageFor(model => model.OldPassword, null, new { @class = "invalid-side-note" })
                    </dd>
                    <dt>@Html.LabelFor(model => model.NewPassword)</dt>
                    <dd>
                        @Html.EditorFor(model => model.NewPassword)
                        @Html.ValidationMessageFor(model => model.NewPassword, null, new { @class = "invalid-side-note" })
                    </dd>
                    <dt>@Html.LabelFor(model => model.ConfirmPassword)</dt>
                    <dd>
                        @Html.EditorFor(model => model.ConfirmPassword)
                        @Html.ValidationMessageFor(model => model.ConfirmPassword, null, new { @class = "invalid-side-note" })
                    </dd>
                </dl>
                    <input type="submit" value="Save" class="button red inframebutton" />
            </fieldset>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2012-10-01
    相关资源
    最近更新 更多