私は WCAG AA 準拠のサイトに取り組んでいます。これは、入力フォームが null または空でない場合、次の属性を持つ必要があることを意味します。
required='required'
value='{the value}'
それらが null または空の場合、それらの属性は存在しないはずです。したがって、以下は 2 つのアカウントで WCAG に失敗します。
<input type='date' required='false' value='' />
カミソリ ビューで if ステートメントから始めました。
@if (Model.HasValue)
{
<input type="date" id="@Model.Name" name="@Model.Name" min="1990-01-01" max="2100-01-01" value="@Model.CoercedValue" />
}
else {
<input type="date" id="@Model.Name" name="@Model.Name" min="1990-01-01" max="2100-01-01" />
}
しかし、他のオプションの属性が追加されると、これは本当に速く醜くなり始めます。必須属性を追加すると4文になります。
これには 2 つの方法があると思います。ロジックを ViewModel にプッシュして、属性文字列を返します。
public string this[string key]
{
get {
switch (key){
case "Required":
return IsRequired?"required='required'":String.Empty;
case "Value":
return HasValue ? String.Format("value='{0}'", CoercedValue) : String.Empty;
default:
return String.Empty;
}
}
}
ビューは次のようになります。
<input type='date' @Model["Required"] @Model["Value"] />
別の方法は、このロジックをビューのコード ブロックに配置することです。
@{
RequiredAttr = IsRequired?"required='required'":String.Empty;
ValueAttr = HasValue ? String.Format("value='{0}'", CoercedValue) : String.Empty;
}
残りのビュー マークアップ:
<input type='date' @RequiredAttr @ValueAttr />
私は ViewModel のマークアップに傾倒していますが、それは最適な場所ですか? これを解決するパターンがありませんか?