ASP.NET 核心 - TagHelper、部分视图和 属性 名称冲突
ASP.NET Core - TagHelper, Partial Views and property name conflict
在一个 ASP.NET 核心 MVC 项目中,假设我有两个局部视图 _viewA
和 _viewB
以及两个关联模型 ModelA
和 ModelB
。
并且说 ModelA
和 ModelB
都有一个名为 MyProperty
的 属性。
然后在 _viewA
和 _viewB
中我使用 asp-for="MyProperty"
.
我的问题是我的页面最后有两个具有相同 ID 的 html 元素。
我怎样才能避免这种情况?
请注意,我不想重命名 MyProperty,因为我的模型不应该关心 UI 约束。
谢谢 @stephen-muecke as well as this 我已经用 HtmlFieldPrefix
解决了这个问题。这是一个与 .Net Core 一起使用的扩展方法,将在 @html.PartialFor("_viewA", "viewAPrefix")
中使用。然后,部分视图中的所有 ID 和名称都带有前缀(即使不使用 asp-for
)。
public static IHtmlContent PartialFor(this IHtmlHelper helper, string partialViewName, string prefix)
{
var viewData = new ViewDataDictionary(helper.ViewData);
var htmlPrefix = viewData.TemplateInfo.HtmlFieldPrefix;
viewData.TemplateInfo.HtmlFieldPrefix += !Equals(htmlPrefix, string.Empty) ? $".{prefix}" : prefix;
return helper.Partial(partialViewName, viewData);
}
在一个 ASP.NET 核心 MVC 项目中,假设我有两个局部视图 _viewA
和 _viewB
以及两个关联模型 ModelA
和 ModelB
。
并且说 ModelA
和 ModelB
都有一个名为 MyProperty
的 属性。
然后在 _viewA
和 _viewB
中我使用 asp-for="MyProperty"
.
我的问题是我的页面最后有两个具有相同 ID 的 html 元素。
我怎样才能避免这种情况?
请注意,我不想重命名 MyProperty,因为我的模型不应该关心 UI 约束。
谢谢 @stephen-muecke as well as this HtmlFieldPrefix
解决了这个问题。这是一个与 .Net Core 一起使用的扩展方法,将在 @html.PartialFor("_viewA", "viewAPrefix")
中使用。然后,部分视图中的所有 ID 和名称都带有前缀(即使不使用 asp-for
)。
public static IHtmlContent PartialFor(this IHtmlHelper helper, string partialViewName, string prefix)
{
var viewData = new ViewDataDictionary(helper.ViewData);
var htmlPrefix = viewData.TemplateInfo.HtmlFieldPrefix;
viewData.TemplateInfo.HtmlFieldPrefix += !Equals(htmlPrefix, string.Empty) ? $".{prefix}" : prefix;
return helper.Partial(partialViewName, viewData);
}