再次关于自定义模板

时间:2011-07-15 17:38:02

标签: c# asp.net-mvc-3 razor

有些时候我asked关于自定义模板的问题。 我发现解决方案使用非强类型视图用于自定义模板(对于double类型属性):

@{
   string id = ViewData.TemplateInfo.GetFullHtmlFieldId("");
   string name = ViewData.TemplateInfo.GetFullHtmlFieldName("");
   string value = string.Format(System.Globalization.CultureInfo.CurrentCulture, "{0}", ViewData.ModelMetadata.Model);
} 
<input type="text" id="@id" name="@name" value="@value" />

但我无法找到有关TemplateInfo的方法如何获取名称和ID的信息?如果属性是复杂类型的对象,我应该传递给它们的参数是什么?

1 个答案:

答案 0 :(得分:1)

他们默认为HtmlFieldPrefix

public string GetFullHtmlFieldName(string partialFieldName)
{
    return (this.HtmlFieldPrefix + "." + (partialFieldName ?? string.Empty)).Trim(new char[] { '.' });
}


public string GetFullHtmlFieldId(string partialFieldName)
{
    return HtmlHelper.GenerateIdFromName(this.GetFullHtmlFieldName(partialFieldName));
}

在局部视图中,您甚至可以将HtmlFieldPrefix设置为视图模型中的某些内容

ViewData.TemplateInfo.HtmlFieldPrefix = Model.MyPrefix; // MOdel refers to your view model instance

在相关说明中,请查看此处:http://btburnett.com/2011/03/correcting-mvc-3-editorfor-template-field-names-when-using-collections.html