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

Razor 如何在视图的asp.net core ViewData[]对象中正确连接多个变量,razor,asp.net-core-mvc,viewdata,Razor,Asp.net Core Mvc,Viewdata,在我的视野中: @{ 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.

在我的视野中:

@{
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[]字符串,那么这种情况似乎总是会发生。我需要对语法做哪些更改才能让这些实际值在我的浏览器中传递和呈现?

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

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

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


此外,您还评论了这些值正在您的布局中使用,在这种情况下,考虑使用包含这些属性的Basic View模型,并将它们设置在Controller方法中,以便布局使用<代码> @ model YouBaseView model < /C>。使用该布局的每个视图都继承自您的基本视图模型

所有属性的类型似乎都是
字符串
,因此不需要使用
Html.DisplayFor()
(但是如果这样做,则它必须是
@Html.DisplayFor()
-请注意前面的
@
,以便输出该方法的结果)

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

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


此外,您还评论了这些值正在您的布局中使用,在这种情况下,考虑使用包含这些属性的Basic View模型,并将它们设置在Controller方法中,以便布局使用<代码> @ model YouBaseView model < /C>。使用该布局的每个视图都继承自您的基本视图模型

什么是
CategoryURL
urlslaug
的值?为什么要将结果指定给
VIewData
属性(然后在布局中使用值)?为什么要使用
Html.DisplayFor()
而不仅仅是
@Model.CategoryURL
等字符串呢。是的,布局。你说得对,我应该使用
@Model
而不是Html.DisplayFor。这就是问题所在。我尝试了
@model
,结果无效,但显然必须大写。请添加您的答案,我将标记为已解决。谢谢知道它必须很简单。
CategoryURL
URLSlug
的值是什么?为什么要将结果指定给
VIewData
属性(然后在布局中使用值)?为什么要使用
Html.DisplayFor()
而不仅仅是
@Model.CategoryURL
等字符串呢。是的,布局。你说得对,我应该使用
@Model
而不是Html.DisplayFor。这就是问题所在。我尝试了
@model
,结果无效,但显然必须大写。请添加您的答案,我将标记为已解决。谢谢我知道这必须很简单。谢谢你的其他建议。谢谢你的其他建议。