关闭基本类型的data-val- *属性

时间:2012-05-22 11:05:25

标签: asp.net-mvc-3

有没有人知道如何通过data-val- *属性来关闭MVC3自动装饰原始类型。

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

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

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

4 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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

<input type="checkbox" name="foo" value="@item.foo" class="input-validation-error"
 data-val="false">

答案 2 :(得分: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);
    }

答案 3 :(得分:0)

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