微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

强制用户在ASP.NET MVC中选中一个复选框 仅服务器端验证客户端和服务器端验证

如何解决强制用户在ASP.NET MVC中选中一个复选框 仅服务器端验证客户端和服务器端验证

我已经为我的网站设计了一份注册表,现在我在“模型”中定义了“条款和条件接受”复选框。

现在我想现在有什么方法可以强迫用户选中该复选框吗?

如果它是在ASP.NET MVC中预定义的,那么我将使用它来检查服务器端和客户端,如果不是,则使用Javascript。

这是我的代码

Registerviewmodel

public class Registerviewmodel
{
    [required(ErrorMessage = "{0} نمی تواند خالی باشد")]
    [RegularExpression("^[\u0600-\u06FF\u0698\u067E\u0686\u06AF ]{2,}$",ErrorMessage = "نام فقط شامل الفبای فارسی می باشد.")]
    [StringLength(32,MinimumLength = 2,ErrorMessage = "طول نام کاربری بین 4 تا 32 کاراکتر است.")]
    [display(Name = "نام")]
    public string Firstname { get; set; }

    [required(ErrorMessage = "{0} نمی تواند خالی باشد")]
    [RegularExpression("^[\u0600-\u06FF\u0698\u067E\u0686\u06AF ]{2,ErrorMessage = "طول نام کاربری بین 4 تا 32 کاراکتر است.")]
    [display(Name = "نام خانوادگی")]
    public string LastName { get; set; }

    [required(ErrorMessage = "{0} نمی تواند خالی باشد")]
    [Phone]
    [display(Name = "شماره تلفن")]
    public string PhoneNumber { get; set; }

    [required(ErrorMessage = "{0} نمی تواند خالی باشد")]
    [display(Name = "جنسیت")]
    public Gender Gender { get; set; }

    [required(ErrorMessage = "{0} نمی تواند خالی باشد")]
    [RegularExpression("^[a-zA-Z][a-zA-Z_]+$",ErrorMessage = "نام کاربری شامل الفبای انگلیسی، اعداد و آندرلاین می باشد.")]
    [StringLength(16,MinimumLength = 4,ErrorMessage = "طول نام کاربری بین 4 تا 16 کاراکتر است.")]
    [display(Name = "نام کاربری")]
    public string Username { get; set; }

    [required(ErrorMessage = "{0} نمی تواند خالی باشد")]
    [EmailAddress(ErrorMessage = "پست الکترونیک به درستی وارد نشده است.")]
    [display(Name = "پست الکترونیک")]
    public string Email { get; set; }

    [required(ErrorMessage = "{0} نمی تواند خالی باشد")]
    [StringLength(100,ErrorMessage = "پسوورد باید بین {0} و {2} کاراکتر باشد.",MinimumLength = 6)]
    [DataType(DataType.Password)]
    [display(Name = "رمز عبور")]
    public string Password { get; set; }

    [required(ErrorMessage = "{0} نمی تواند خالی باشد")]
    [DataType(DataType.Password)]
    [display(Name = "تکرار رمز عبور")]
    [Compare("Password",ErrorMessage = "رمز عبور با تکرارش همخوانی ندارد.")]
    public string ConfirmPassword { get; set; }

    [required]
    public bool IsAgreeWithTerms { get; set; }

注册视图

<section class="register-area">
<div class="row m-1">
    <div class="col-lg-12 col-md-12 p-0">
        <div class="register-content">
            <div class="d-table">
                <div class="d-table-cell">
                    <div class="register-form">
                        <h3><i class="bx bx-user"></i> ثبت نام در ایران پی سی جِی</h3>
                        @using (Html.BeginForm("Register","Account",new { ReturnUrl = ViewBag.ReturnUrl },FormMethod.Post,new { @class = "form-horizontal",role = "form" }))
                        {
                            @Html.AntiForgeryToken()
                    <div class="row m-1">
                        <div class="form-group col-lg-6 col-m-6">
                            @Html.TextBoxFor(m => m.Firstname,new { @class = "form-control",@placeHolder = "نام" })
                            @Html.ValidationMessageFor(m => m.Firstname,"",new { @class = "text-danger" })
                        </div>

                        <div class="form-group col-lg-6 col-m-6">
                            @Html.TextBoxFor(m => m.LastName,@placeHolder = "نام خانوادگی" })
                            @Html.ValidationMessageFor(m => m.LastName,new { @class = "text-danger" })
                        </div>

                        <div class="form-group col-lg-6 col-m-6">
                            @Html.EnumDropDownListFor(m => m.Gender,"--جنسیت--",new { @class = "form-control" })
                            @Html.ValidationMessageFor(m => m.Gender,new { @class = "text-danger" })
                        </div>

                        <div class="form-group col-lg-6 col-m-6">
                            @Html.TextBoxFor(m => m.PhoneNumber,@placeHolder = "شماره تلفن" })
                            @Html.ValidationMessageFor(m => m.PhoneNumber,new { @class = "text-danger" })
                        </div>

                        <div class="form-group col-lg-6 col-m-6">
                            @Html.TextBoxFor(m => m.Username,@placeHolder = "نام کاربری" })
                            @Html.ValidationMessageFor(m => m.Username,new { @class = "text-danger" })
                        </div>

                        <div class="form-group col-lg-6 col-m-6">
                            @Html.TextBoxFor(m => m.Email,@placeHolder = "ایمیل" })
                            @Html.ValidationMessageFor(m => m.Email,new { @class = "text-danger" })
                        </div>

                        <div class="form-group col-lg-6 col-m-6">
                            @Html.PasswordFor(m => m.Password,@placeHolder = "رمز عبور" })
                            @Html.ValidationMessageFor(m => m.Password,new { @class = "text-danger" })
                        </div>

                        <div class="form-group col-lg-6 col-m-6">
                            @Html.PasswordFor(m => m.ConfirmPassword,@placeHolder = "تکرار رمز عبور" })
                            @Html.ValidationMessageFor(m => m.ConfirmPassword,new { @class = "text-danger" })
                        </div>

                        <div class="form-group col-lg-6 col-m-6 terms">
                            @Html.CheckBoxFor(m => m.IsAgreeWithTerms)
                            با <a href="#">قوانین و شرایط</a> ایران پی سی جِی موفق هستم.
                        </div>

                        <div class="form-group col-lg-6 col-m-6">
                            <button type="submit">ثبت نام</button>
                        </div>

                    </div>
                        }
                    </div>
                </div>
            </div>
        </div>
    </div>
</div>
</section>

那么有什么方法可以禁止用户在不检查IsAgreeWithTerms字段的情况下提交表单?

感谢您的回复

解决方法

您可以编写从vec #[1] "Col1" "Col2islonr" "Col3isabir" "Col4isless" "Col5willbt" 继承来的自定义验证属性,以在服务器端和客户端进行验证时强制将值设置为true,但是如果您不想进行额外的设置,最简单的方法是重用现有的验证属性。

仅服务器端验证

您可以使用IClientValidatable在复选框上强制使用真值。

[Range]

客户端和服务器端验证

如果您希望客户端验证也能正常工作,而不是使用[Range(typeof(bool),"true",ErrorMessage = "You need to agree first!")] public bool IsAgreeWithTerms { get; set; } ,则需要在视图中将[Range]与只读字段声明为[Compare]一起使用型号:

true

然后在视图上,您​​需要将read-onl属性存储到隐藏的输入中:

public class RegisterViewModel
{
    public bool ExpectedAgreement => true;

    [Compare(nameof(ExpectedAgreement),ErrorMessage = "You need to agree first!")]
    public bool IsAgreeWithTerms { get; set; }
}

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。