如何在视图的 asp.net 核心 ViewData[] 对象中正确连接多个变量

How to properly concatenate multiple variables in asp.net core ViewData[] object of a view

在我的视图顶部:

@{
ViewData["Title"] = @Html.DisplayFor(model => model.SETitle);
ViewData["Description"] = @Html.DisplayFor(model => model.SEDescription);

ViewData["canonical"] = String.Concat("https://example.com/", Html.DisplayFor(model => model.CategoryURL), "/", Html.DisplayFor(model => model.URLSlug));

}

这在浏览器中呈现如下:

<link rel="canonical" href="https://example.com/Microsoft.AspNetCore.Mvc.ViewFeatures.StringHtmlContent/Microsoft.AspNetCore.Mvc.ViewFeatures.StringHtmlContent">

我使用的是标准 asp.net 核心模板。如果您将多个变量连接在一起以获得 ViewData[] 字符串,这似乎总是会发生。我需要对我的语法进行哪些更改才能让这些实际值在我的浏览器中传递和呈现?

您的所有属性似乎都是 string 类型,因此无需使用 Html.DisplayFor()(但如果您这样做,则需要使用 @Html.DisplayFor() - 请注意前导@所以方法的结果输出了)。

相反,您可以只使用 @Model.CategoryURL@Model.URLSlug

并且如果 https://example.com/ 是您的站点,那么您应该使用 Url.Action() 方法来生成正确的相对 url 而无需对站点名称进行硬编码。

此外,您评论说您的布局中使用了这些值,在这种情况下,请考虑使用包含这些属性的基本视图模型并在控制器方法中设置它们,以便布局使用 @model yourBaseViewModel ,并且每个使用该布局的视图都继承自您的基本视图模型