fre*_*nky 54 asp.net-mvc jquery-validate
这是验证的模型:
[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; }
//...
}
Run Code Online (Sandbox Code Playgroud)
这是观点:
<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>
Run Code Online (Sandbox Code Playgroud)
这是得到的渲染:
<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>
Run Code Online (Sandbox Code Playgroud)
问题是TagId验证是生成的,但是没有在TagId属性上设置必需属性.因此我甚至无法通过客户端验证来在db中创建新的Tag.我错过了什么?
fre*_*nky 100
我找到了答案.只需将其添加到Application_Start:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
Run Code Online (Sandbox Code Playgroud)
Cur*_*lop 22
使视图模型值类型可以为空.然后默认情况下它们不是必需的.
另请注意,如果在html 5中放置属性'required ="false"'(如果在doctype元数据中设置html 5),则会看到"required"并使其成为必需项.您可以使用dojo-data-props ="required:false".
frennky的解决方案只删除data-val-required,但在我的情况下,我仍然有data-val-number和data-val
我必须将以下两行添加到Application_Start来摆脱所有内容。
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelValidatorProvider());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41923 次 |
| 最近记录: |