不需要的属性不断获取data-val-required属性
这是它的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; } //... }
这是观点:
<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>
这里是得到的渲染:
<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>
问题是TagIdvalidation被生成,如果在TagId属性上没有设置必需的属性。 因此,我甚至不能通过客户端validation,以创build新的数据库标记。 我错过了什么?
我find了答案。 只需将其添加到Application_Start
:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
使视图模型的值types可以为空。 那么默认情况下它们不会被要求。
注意,如果你把属性'required =“false”'放在html 5中(如果你在你的doctype元数据中设置了html 5),它将会看到“required”并使其成为必需。 你可以使用dojo-data-props =“required:false”。
frennky的解决scheme只能删除data-val-required
但在我的情况下,我仍然有data-val-number
和data-val
我不得不将下面的两行添加到Application_Start中去除一切。
ModelValidatorProviders.Providers.Clear(); ModelValidatorProviders.Providers.Add(new DataAnnotationsModelValidatorProvider());
问题是隐藏字段的值是空的。 这不应该发生,如果你使用整数types。 我想TagId属性被定义为Tag
类中的可为空的types。 所以要么在渲染视图之前给它赋值,要么使用整数types:
[MetadataType(typeof(TagValidation))] public partial class Tag { public int TagId { get; set; } public string Name { get; set; } }
这样生成的隐藏字段如下所示:
<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="0" />
通常客户端validation也不应该为这个隐藏的字段触发。
jqueryvalidation目标cheking“禁用”的HTML属性。
$(function () { $("#TagId").attr("disabled", "disabled") });
或者使用Nullable。
希望这个代码!
有了MVC4,你也可以使用这个:
@{ Html.EnableClientValidation(false); } @Html.EditorForModel() @{ Html.EnableClientValidation(true); }
使您的模型或视图模型属性值types“nullabel”。 这将解决你的问题。一个重要的事情,从您的标记中删除“必需”属性,否则将采取我“所需”
例:-
public class ViewModle { public int? foo{get;set;} }
在这个例子中,foo是整型可空types,在mvc中这将不再需要。
希望这会帮助你。
- 如何在ASP.NET MVC应用程序中设置debugging启动页面?
- mvc:favicon.ico也查找控制器吗?
- Asp.Net MVC 2 – 将模型的属性绑定到不同的命名值
- 我怎样才能捕捉所有的路线来处理404页面未find的ASP.NET MVC查询?
- ASP.NET MVC使用自定义模型绑定器时,客户端会检测到有潜在危险的Request.Form值
- 在MVC中的Ajax.BeginForm来上传文件
- “ASP.global_asax不存在于命名空间ASP”
- ASP.NET MVC:数据input后修剪string的最佳方法。 我应该创build一个自定义模型绑定
- 不同的ASP.NETcaching选项的优点/缺点