在我的观点之上:
@{
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 []字符串连接多个变量,似乎总是会出现这种情况。我需要更改我的语法才能让这些实际值通过并在浏览器中呈现?
答案 0 :(得分:2)
您的所有属性似乎都是string
的类型,因此无需使用Html.DisplayFor()
(但如果您这样做,则需要@Html.DisplayFor()
- 请注意前导@
1}}所以输出方法的结果。)
相反,您可以使用@Model.CategoryURL
和@Model.URLSlug
。
如果https://example.com/
是您的网站,那么您应该使用Url.Action()
方法执行此操作,以生成正确的相对网址,而无需对网站名称进行硬编码。
此外,您已评论过这些值正在布局中使用,在这种情况下,请考虑使用包含这些属性的基本视图模型并在控制器方法中设置它们,以便布局使用@model yourBaseViewModel
,并且使用该布局的每个视图都继承自基本视图模型