我有一个表格,即使禁用JavaScript也需要工作,我必须验证这个表单,我有一个标签助手,如下所示:
<span asp-validation-for="ContactName" class="text-danger" />
在我的控制器中:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(ContactViewModel contact)
{
if (!ModelState.IsValid)
{
return View(contact);
}
// do something
}
这是我的观点模型:
public class ContactViewModel
{
public int ContactId { get; set; }
public DateTime ContactDate { get; set; }
[Required(ErrorMessage ="پر کردن این فیلد الزامی میباشد.")]
[MaxLength(100, ErrorMessage ="حداکثر تعداد کراکتر برای این فیلد نمیتواند بیشتر از صد باشد.")]
public string ContactName { get; set; }
[Required(ErrorMessage = "پر کردن این فیلد الزامی میباشد.")]
[EmailAddress(ErrorMessage ="لطفا یک ایمیل معتبر وارد کنید.")]
[MaxLength(100, ErrorMessage = "حداکثر تعداد کراکتر برای این فیلد نمیتواند بیشتر از صد باشد.")]
public string ContactEmail { get; set; }
[Required(ErrorMessage = "پر کردن این فیلد الزامی میباشد.")]
[MaxLength(4000, ErrorMessage = "حداکثر تعداد کراکتر برای این فیلد نمیتواند بیشتر از چهار هزار باشد.")]
public string ContactBody { get; set; }
[Range(1000000000, double.MaxValue, ErrorMessage = "لطفا یک شماره تلفن معتبر وارد نمایید.")]
public string ContactPhone { get; set; }
}
当我使用标记帮助程序进行验证时,如果验证失败,验证消息不会显示在文本框下方,但是当我使用旧的Html帮助程序时:
@Html.ValidationMessageFor(model => model.ContactName)
它有效,我想知道它是设计还是错误?另外值得注意的是,如果我设置了asp-validation-summary="ValidationSummary.All"
,验证摘要标记帮助程序是有效的,但是我想要在表单上为单个文本框提供验证消息吗?
答案 0 :(得分:2)
我意识到了
<span asp-validation-for="Model.Name" class="text-danger"/>
除非您将jquery-validation js添加到页面,否则将不会呈现。 在MVC Core中,您必须通过调用
来添加它 @section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
部分视图_validationScriptsPartial具有此标记
<environment names="Development">
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
答案 1 :(得分:0)
客户端验证无法在没有javascript的情况下运行,您还必须进行服务器端验证,以便无论是否使用javascript都可以使用
即在服务器上检查模型是否有效以及是否将用户返回到同一视图
if (!ModelState.IsValid)
{
return View(model);
}