不需要的属性不断获取 data-val-required 属性 [英] Unrequired property keeps getting data-val-required attribute

查看:28
本文介绍了不需要的属性不断获取 data-val-required 属性的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是经过验证的模型:

[MetadataType(typeof(TagValidation))]公共部分类标签{}公共类标签验证{[可编辑(假)][HiddenInput(DisplayValue = false)]公共 int TagId { 获取;放;}[必需的][字符串长度(20)][数据类型(DataType.Text)]公共字符串名称 { 获取;放;}//...}

这是视图:

 

创建

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script><script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>@using (Html.BeginForm()) {@Html.ValidationSummary(true)<字段集><legend>标签</legend><div>@Html.EditorForModel()</div><p><输入类型=提交"值=创建"/></p></fieldset>}<div>@Html.ActionLink("返回列表", "索引")

这是得到的渲染:

<字段集><legend>标签</legend><div><input data-val="true" data-val-number="TagId 字段必须是数字.data-val-required="TagId 字段是必需的."id="TagId" name="TagId" type="hidden" value=""/><div class="editor-label"><label for="Name">Name</label></div><div class="editor-field"><input class="text-box single-line" data-val="true" data-val-length="字段名称必须是最大长度的字符串20 个."" data-val-length-max="20" data-val-required="名称字段是必需的.id="Name" name="Name" type="text" value=""/><span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span></div>...</fieldset></表单>

问题是 TagId 验证会生成,尽管 TagId 属性上没有设置必需的属性.因此,我什至无法通过客户端验证以在 db 中创建新标签.我错过了什么?

解决方案

我找到了答案.只需将其添加到 Application_Start:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

This is the model with it's validation:

[MetadataType(typeof(TagValidation))]
public partial class Tag
{
}

public class TagValidation
{
        [Editable(false)]
        [HiddenInput(DisplayValue = false)]
        public int TagId { get; set; }

        [Required]
        [StringLength(20)]
        [DataType(DataType.Text)]
        public string Name { get; set; }
    //...
}

Here is the view:

    <h2>Create</h2>

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

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Tag</legend>

        <div>@Html.EditorForModel()</div>

        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
}

<div>
    @Html.ActionLink("Back to List", "Index")
</div>

And here is what get's renderd:

<form action="/Tag/Create" method="post">
    <fieldset>
        <legend>Tag</legend>
        <div><input data-val="true" data-val-number="The field TagId must be a number." data-val-required="The TagId field is required." id="TagId" name="TagId" type="hidden" value="" />

        <div class="editor-label"><label for="Name">Name</label></div>
        <div class="editor-field"><input class="text-box single-line" data-val="true" data-val-length="The field Name must be a string with a maximum length of 20." data-val-length-max="20" data-val-required="The Name field is required." id="Name" name="Name" type="text" value="" /> <span class="field-validation-valid" data-valmsg-for="Name" data-valmsg-replace="true"></span></div>            
    ...
    </fieldset>
</form>

The problem is that TagId validation gets generated althoug thare is no Required attribute set on TagId property. Because of that I can't even pass the client-side validation in order to create new Tag in db. What am I missing?

解决方案

I found the answer. Just add this to Application_Start:

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

这篇关于不需要的属性不断获取 data-val-required 属性的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆