禁用javascript时,Asp.Net Core MVC RC-1验证不会显示

时间:2016-03-26 17:06:02

标签: asp.net-core asp.net-core-mvc

我有一个表格,即使禁用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",验证摘要标记帮助程序是有效的,但是我想要在表单上为单个文本框提供验证消息吗?

2 个答案:

答案 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);
}