Asp.net mvc Unrequired属性不断获取数据val required属性
这是带有验证的模型:Asp.net mvc Unrequired属性不断获取数据val required属性,asp.net-mvc,jquery-validate,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] [Stri
[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>
创建
@使用(Html.BeginForm()){
@Html.ValidationSummary(true)
标签
@Html.EditorForModel()
}
@ActionLink(“返回列表”、“索引”)
下面是get的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>
标签
名称
...
问题是,尽管TagId属性上没有设置必需的属性,但仍会生成TagId验证。因此,我甚至无法通过客户端验证来在db中创建新标记。
我遗漏了什么?问题是隐藏字段的值为空。如果使用整数类型,则不应发生这种情况。我假设TagId属性在
Tag
类中定义为可为空的类型。因此,在渲染视图之前为其指定一个值或使用整数类型:
[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"
/>
通常情况下,此隐藏字段不应触发客户端验证。我找到了答案。只需将此添加到
应用程序\u Start
:
DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;
jquery验证目标检查“禁用”html属性
$(function () {
$("#TagId").attr("disabled", "disabled")
});
或者使用Nullable
希望这个代码 使视图模型值类型可为空。那么默认情况下就不需要它们了
另外请注意,如果将属性'required=“false”'放在HTML5中(如果在doctype元数据中设置HTML5),它将看到“required”,并将其设置为required。您可以使用dojo data props=“required:false”。frennky的解决方案只删除了
所需的数据值
,但在我的情况下,我仍然有数据值编号
和数据值
我不得不在应用程序开始时添加下面的两行,以摆脱一切
ModelValidatorProviders.Providers.Clear();
ModelValidatorProviders.Providers.Add(new DataAnnotationsModelValidatorProvider());
有了MVC4,您还可以使用:
@{ Html.EnableClientValidation(false); }
@Html.EditorForModel()
@{ Html.EnableClientValidation(true); }
使模型或视图模型属性值类型为“nullabel”。这将解决您的问题。重要的一点是从标记中删除“required”属性,否则它将使用i“required” 例如:-
public class ViewModle
{
public int? foo{get;set;}
}
在这里的例子中,foo是整数可为null的类型,在mvc中不再需要它
希望这能对您有所帮助。首先,TagId不是空的,它只是int。其次,标记是由html助手EditorForModel生成的,所以我无法控制它。要将值设置为0,我想我可以发送一个空的标记实例来创建页面,但这不是我要寻找的解决方案。谢谢。也救了我一天。在我看来,这是倒退的行为。False应该是默认值。@frnky我添加了这个,但它没有解决我的问题。请你帮帮我好吗。谢谢你也救了我一天!!!即使不添加此项,fluent验证也无法正常工作!!有没有办法改变
RequiredAttribute
隐式使用的内容,而不是简单地禁用此功能?天哪,此设置怎么不是默认设置。浪费了一个小时this@nuander值得关注。这就像是用大锤敲开坚果。这里有一个更简单的答案对我有效为什么要投否决票?使属性可为null是解决此问题的有效方法,而不必在应用程序_Start中进行系统范围的更改。@StuartQ我同意你的意见,所以我对它投了赞成票以删除反对票。使属性可为null是解决此问题的有效方法。这对我很有效。绝对是更好的答案!我不希望为了从一个角度解决一个问题而进行全系统的更改。干杯