在Razor我知道如果你写
@Html.HiddenFor(x => x.PropertyX.PropertyY)
它将生成HTML,如:
<input type="hidden" name="PropertyX.PropertyY" value="...">
并且(特别是)如果这是在编辑器模板中,它可能会生成此HTML:
<input type="hidden" name="ParentProperty[12].PropertyX.PropertyY" value="...">
如何获取任意属性的名称?我假设必须有一些方法来使用MVC基础设施(可能是一些方法或类?)
答案 0 :(得分:7)
您可以为此编写自定义帮助程序:
public static class NameExtensions
{
public static string NameFor<TModel, TProperty>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TProperty>> expression
)
{
var partialName = ExpressionHelper.GetExpressionText(expression);
return html
.ViewContext
.ViewData
.TemplateInfo
// You could do the same with GetFullHtmlFieldId
// if you were interested in the id of the element
.GetFullHtmlFieldName(partialName);
}
}
然后:
@Html.NameFor(x => x.PropertyX.PropertyY)