3

data-val-* 属性でプリミティブ型を自動的に装飾する MVC3 をオフにする方法を知っている人はいますか?

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false;

data-val-required 属性を削除しますが、プリミティブ型をオフにする方法が見つからないようです: data-val-number

フォームでの検証を必要としない非表示の int フィールドがたくさんありますが、これらの属性のために検証されているため、アプリがフリーズしているように見えます。

4

4 に答える 4

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

非表示の 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 に答える