ASP.NET Core Razor 页面中的变量范围和 HTML 标记
Posted
技术标签:
【中文标题】ASP.NET Core Razor 页面中的变量范围和 HTML 标记【英文标题】:Variable scope and HTML tag in ASP.NET Core Razor Pages 【发布时间】:2021-08-05 09:48:13 【问题描述】:我使用 Visual Studio 2019 和“Web 应用程序”模板创建了一个新的 ASP.NET Core 3.1 Web 应用程序项目。一切正常,我可以毫无问题地构建和运行应用程序。
然后我开始编辑_Layout.cshtml
文件。这个 sn-p 构建良好:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>@ViewData["Title"] - WebApplication1</title>
</head>
<body>
@ string foo = (string)ViewData["foo"];
@if (foo == "bar")
<div>test</div>
@RenderBody()
</body>
</html>
这个没有构建:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>@ViewData["Title"] - WebApplication1</title>
@ string foo = (string)ViewData["foo"];
</head>
<body>
@if (foo == "bar")
<div>test</div>
@RenderBody()
</body>
</html>
使用第二个 sn-p 构建解决方案会导致以下错误:
1>------ Build started: Project: WebApplication1, Configuration: Debug Any CPU ------
1>C:\...\WebApplication1\WebApplication1\Pages\Shared\_Layout.cshtml(9,10,9,13): error CS0103: The name 'foo' does not exist in the current context
1>Done building project "WebApplication1.csproj" -- FAILED.
Razor Pages 变量的范围是否仅限于其声明的 HTML 标记?如果是这样,为什么当我在无法访问的范围内声明变量并允许我使用 F12 键导航到变量定义时智能感知没有显示任何错误?
【问题讨论】:
【参考方案1】:我使用了你的_Layout.cshtml视图代码,在VS启动的时候出现了和你一样的错误,然后页面报如下错误:
默认情况下,每个布局都必须调用 RenderBody。无论在哪里调用RenderBody,都会渲染视图的内容。添加之后,就可以正常启动项目了。
除了Razor变量的问题,只需要在block中使用@声明变量即可。然后,您可以在视图中的任何位置使用该变量。
【讨论】:
正如问题中提到的,为简洁起见,我没有在 sn-p 中包含所有原始内容。RenderBody
调用在我的布局中执行。事实上,我并没有从 Visual Studio 生成的原始布局中删除任何一行代码,我只是添加了 sn -p 中显示的行。另请注意,变量声明中使用了@
。以上是关于ASP.NET Core Razor 页面中的变量范围和 HTML 标记的主要内容,如果未能解决你的问题,请参考以下文章
更改 ASP.NET Core Razor 页面中的默认登录页面?