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