0

在ASP.NET Core MVC项目中,假设我有两个部分视图_viewA_viewB以及两个关联模型ModelAModelB

ASP.NET Core - TagHelper,部分视图和属性名称冲突

并且说ModelAModelB都有一个名为MyProperty的属性。 然后在_viewA_viewB我使用asp-for="MyProperty"

我的问题是,我的网页最后有两个具有相同ID的html元素。
我该如何避免这种情况?

请注意,我不想重命名MyProperty,因为我的模型不应该关心UI约束。

+0

不要使用谐音 - 使用'EditorTemplates'(但如果你使用的谐音,你需要通过'HtmlFieldPrefix' - 参见[这个答案](https://stackoverflow.com/questions/29808573/从一个嵌套的复杂对象获得值,它被传递到一个局部视图/ 29809907#29809907)举例 –

+0

就是这样!我必须用.net稍微更新PartialFor核心但tks! –

+0

我试图找到一个asp.net-core-mvc,但不能,因此你可能想添加你自己的答案与修改后的代码 –

回答

1

Tks到@stephen-muecke以及post我用HtmlFieldPrefix解决了这个问题。这是一个可以在@html.PartialFor("_viewA", "viewAPrefix")中使用.Net Core的扩展方法。然后,部分视图中的所有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); 
}