3

有谁知道用 data-val-* 属性关闭 MVC3 自动装饰原始类型的方法。

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

删除 data-val-required 属性,但我似乎找不到关闭原始类型的方法,例如:data-val-number

我有很多隐藏的 int 字段,它们不需要在表单上进行验证,但是由于这些属性它们正在被验证,导致我的应用程序出现冻结。

4

4 回答 4

0

我想隐藏的 int 字段[Required]在视图模型中定义了数据注释?如果是这样,那么我相信您只需要删除数据注释即可防止data-val-required显示该属性。

我可能是错的,但我怀疑你会说当在其他视图中使用该视图模型时该字段是必需的?

如果是这种情况,那么您需要正确定义视图模型,而不是关闭数据注释(本质上是一种解决方法)。理想情况下,每个视图模型都应该特定于它定义的视图(请参阅以下链接的模式 3)。这将避免出现某些视图需要字段而其他视图不需要字段的问题。

于 2012-05-22T13:22:58.817 回答
0

您可以data-val="false"在页面上创建的 HTML 输入中指定,例如:

<input type="checkbox" name="foo" value="@item.foo" class="input-validation-error"
 data-val="false">
于 2012-05-22T13:26:36.577 回答
0

我似乎无法找到关闭此功能的方法,因此创建了自己的 HtmlHelper 作为解决此问题的方法。

public static IHtmlString HiddenInputFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, IDictionary<string, object> htmlAttributes)
    {
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
        var memberExpression = (MemberExpression)expression.Body;
        string fullID = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(memberExpression.Member.Name);
        var builder = new TagBuilder("input");
        builder.MergeAttribute("type", "hidden");
        var value = ModelMetadata.FromLambdaExpression(expression, helper.ViewData).Model;
        builder.MergeAttribute("value", value.ToString());
        string fullName = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
        builder.MergeAttribute("name", fullName);
        builder.GenerateId(fullID);
        var tag = builder.ToString(TagRenderMode.SelfClosing);
        return new HtmlString(tag);
    }
于 2012-05-23T07:58:54.713 回答
0

我注意到,如果您从 ajax 请求加载部分视图,则不会自动添加部分视图内的验证 (data-val-*)。所以我终于改变了我的代码,从 ajax 加载不需要验证的繁重表单数据。

于 2012-06-06T15:54:09.243 回答