0
  1. Html.ValidateForを目立たない検証と一緒に使用することは可能ですか?次のことができるようになりたい:

    <!-data-val*属性を使用して検証を指定したい->
    <input type = "text" data-val-required />

    <!-HTMLヘルパーを使用して、ビューモデル属性を使用してdata-val*属性を挿入したい->
    @ Html.TextBoxFor(m => m.Title)

    <!-入力コントロールを自分でレンダリングできるようにしたいだけでなく、viewmodel属性からの検証も含めて、それも食べたい->
    @ {Html.ValidateFor(m => m.Age); }

  2. 目立たない検証が有効になっているのに、なぜValidateForが無効になっているのですか?両方を使用する簡単な方法は何ですか?

4

1 に答える 1

1

モデルのメタデータを検査し、すべての属性を生成する HTML 拡張メソッドを追加しましたdata-val*(によって消費されるためjquery.unobtrusive.validation)。

このようにして、制御がどのようにレンダリングされるかを完全に制御できます(Html.*メソッドのファミリが、ニーズに合わない名前とID属性を生成する場合があり、余分な引数を追加すると扱いにくくなる場合があります)。

inputフォーム要素内にコントロールが必要であることに注意してください( で必要jquery.unobtrusive.validation)。

public static MvcHtmlString Validation<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression) {
    ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
    IDictionary<string, object> dataValAttrs = html.GetUnobtrusiveValidationAttributes(ExpressionHelper.GetExpressionText(expression), metadata);

    StringBuilder stringBuilder = new StringBuilder();
    foreach (var dataValAttr in dataValAttrs) {
        stringBuilder.Append(' ').Append(dataValAttr.Key).Append("=\"").Append(dataValAttr.Value).Append('"');
    }
    return new MvcHtmlString(stringBuilder.ToString());
}

そして、このメソッドの使用方法は次のとおりです。

<textarea name="Description" class="input-block-level" @Html.Validation(m => m.FormData.Description)></textarea>
@Html.ValidationMessage("Description")

Html.ValidationMessageForここではバージョンを使用できないことに注意してください。これは、この場合に必要な名前FormData_Descriptionとは異なる名前を作成するためDescriptionです (FormData オブジェクトにバインドする POST アクションの目的のため)。

于 2013-01-14T21:03:10.673 に答える