ASP.NET核心-TagHelper、部分视图和属性名称冲突

ASP.NET核心-TagHelper、部分视图和属性名称冲突,asp.net,asp.net-mvc,asp.net-core-mvc,asp.net-core-tag-helpers,Asp.net,Asp.net Mvc,Asp.net Core Mvc,Asp.net Core Tag Helpers,在ASP.NET核心MVC项目中,假设我有两个局部视图\u viewA和\u viewB以及两个关联的模型ModelA和ModelB 假设ModelA和ModelB都有一个名为MyProperty的属性。 然后在\u视图a和\u视图b中,我使用asp for=“MyProperty” 我的问题是,我的页面以两个id相同的html元素结尾。 我怎样才能避免呢? 请注意,我不想重命名MyProperty,因为我的模型不应该关心UI约束。Tks to以及我用HtmlFieldPrefix解决了这个问题

在ASP.NET核心MVC项目中,假设我有两个局部视图
\u viewA
\u viewB
以及两个关联的模型
ModelA
ModelB

假设
ModelA
ModelB
都有一个名为
MyProperty
的属性。 然后在
\u视图a
\u视图b
中,我使用
asp for=“MyProperty”

我的问题是,我的页面以两个id相同的html元素结尾。
我怎样才能避免呢?

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

Tks to以及我用
HtmlFieldPrefix
解决了这个问题。下面是一个与.Net Core一起工作的扩展方法,将在
@html.PartialFor(“\ u viewA”,“viewAPrefix”)
中使用。然后,局部视图中的所有ID和名称都加上前缀(即使不使用
asp for


不要使用partials-使用
EditorTemplates
(但是如果你确实使用了partials,你需要通过
HtmlFieldPrefix
-参考一个例子就是这样!我不得不用.net core稍微更新partialfort,但是tks!我试图为asp.net-core-mvc找到一个副本,但是没有,所以你可能想用修改过的代码添加你自己的答案。我总是重命名输入的id。我不喜欢自动生成的ID。有时您必须这样做,例如单选按钮。使用Core 2.0和TagHelper,重命名比以往任何时候都容易。
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);
}