このようなモデルがあるとします
public class User
{
[Required]
[StringLength(14, ErrorMessage = "Can only be 14 characters long")]
public string UserName;
}
次のようなHtmlヘルパーを作成したい:
@Html.ValidatableEditorFor(m => m.UserName)
次のように、jQuery Vaidation プラグインが検証できる正しい形式のテキスト フィールドを吐き出すようにします。
<input type="text" class="required" maxlength="14" />
私の調査によると、MetaDataModel 内のすべてのデータ注釈を反復処理して、どれが jQuery Validation に適用できるかを確認する方法はないようです。
疑似コードでの動作をどのように想像するか:
var tag = new TagBuilder("input");
tag.mergeAttribute("type", "text");
foreach(var attribute in metadata.attributes)
{
CheckForValidatableAttribute(attribute, tag);
}
...
private void CheckForValidatableAttribute(DataAnnotation attribute, TagBuilder tag)
{
switch(attribute.type)
{
case Required:
tag.addClass("required");
break;
case StringLength
tag.mergeAttribute("maxlength", attribute.value)
break;
}
}
このようなヘルパーを実現するにはどうすればよいでしょうか? 検証リテラルを複製する必要がないように、データ注釈で機能するようにします。
たとえば、TextEditorFor などの現在の Html ヘルパーは、有効な属性を出力フィールドに追加します。どのようにこれを行い、どうすれば独自の実装を作成できますか?
乾杯