EditorTemplateなどでヘルパーを使わずにinput要素を出力したい時がありますが、id属性とname属性の値をどう調達すれば良いのか悩みます。フィールドは入れ子になっていたり配列になっていたりする場合があるので決め打ちで書くことはできません。
ASP.NET MVC 4以降であればIdForヘルパーとNameForヘルパーが用意されているのでそれを使えばよいです。
<input type="text" id="@Html.IdFor(m => m.Example)" name="@Html.NameFor(m => m.Example)" />
そうではない残念な環境やヘルパーが使えない場合などは以下のようにして取得します。
@{
var name = ExpressionHelper.GetExpressionText(m => m.Example);
var id = ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(name);
var fullName = ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(name);
}
<input type="text" id="@id" name="@fullName" />
参考