Html.ValidateForを目立たない検証と一緒に使用することは可能ですか?次のことができるようになりたい:
<!-data-val*属性を使用して検証を指定したい->
<input type = "text" data-val-required /><!-HTMLヘルパーを使用して、ビューモデル属性を使用してdata-val*属性を挿入したい->
@ Html.TextBoxFor(m => m.Title)<!-入力コントロールを自分でレンダリングできるようにしたいだけでなく、viewmodel属性からの検証も含めて、それも食べたい->
@ {Html.ValidateFor(m => m.Age); }目立たない検証が有効になっているのに、なぜValidateForが無効になっているのですか?両方を使用する簡単な方法は何ですか?
4427 次
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 に答える