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); 
}