如何在 Razor 中声明局部变量?
Posted
技术标签:
【中文标题】如何在 Razor 中声明局部变量?【英文标题】:How to declare a local variable in Razor? 【发布时间】:2011-09-29 21:52:34 【问题描述】:我正在用 asp.net mvc 3 开发一个 Web 应用程序。 我对它很陌生。在使用 razor 的视图中,我想声明一些局部变量并在整个页面中使用它。如何做到这一点?
能够执行以下操作似乎相当微不足道:
@bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
@if (isUserConnected)
// meaning that the viewing user has not been saved
<div>
<div> click to join us </div>
<a id="login" href="javascript:void(0);" style="display: inline; ">join</a>
</div>
但这不起作用。这可能吗?
【问题讨论】:
【参考方案1】:我认为你已经很接近了,试试这个:
@bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
@if (isUserConnected)
// meaning that the viewing user has not been saved so continue
<div>
<div> click to join us </div>
<a id="login" href="javascript:void(0);" style="display: inline; ">join here</a>
</div>
【讨论】:
哦,该死的,我正在尝试所有可能的解决方法,但这个。谢谢托马斯! 如何在 VB.NET 中做到这一点? 哦,我自己发现的:@Code .. End Code
而不是@ ..
@Abhijeet.Nagre,在他写的问题中:@bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
但变量定义必须在“代码块”内。我无法给出更好的答案来解释为什么会这样,这就是剃须刀的工作原理。
@AbhijeetNagre - Razor通常非常擅长理解代码的开始和结束位置,但它并不完美。有时我们只需要给它一点提示,什么应该被视为 Razor/C#,什么不应该。如果您遇到 Razor 错误,通常第一步是添加
标签【参考方案2】:
我认为变量应该在同一个块中:
@bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
if (isUserConnected)
// meaning that the viewing user has not been saved
<div>
<div> click to join us </div>
<a id="login" href="javascript:void(0);" style="display: inline; ">join</a>
</div>
【讨论】:
至少在 MVC3 中似乎是这样。 太棒了!知道如何在页面下方再次使用变量isUserConnected
吗?
@SharpC 一旦你声明了一个这样的变量,它就可以在 .cshtml 文件的其余部分中使用。稍后在文件中,您可以执行@if (isUserConnected) /* stuff if connected */
或<div>Connected? @isUserConnected</div>
之类的操作(这对字符串更有效)。但它在该文件之外不可用(例如,您必须在部分中单独声明它)。【参考方案3】:
你也可以使用:
@if(string.IsNullOrEmpty(Model.CreatorFullName))
...your code...
代码中不需要变量
【讨论】:
这没有提供问题的答案。【参考方案4】:不是对 OP 问题的直接回答,但它也可能对您有所帮助。您可以在作用域内的某个 html 旁边声明一个局部变量,而不会遇到麻烦。
@foreach (var item in Model.Stuff)
var file = item.MoreStuff.FirstOrDefault();
<li><a href="@item.Source">@file.Name</a></li>
【讨论】:
【参考方案5】:如果你正在寻找一个 int 变量,一个随着代码循环而递增的变量,你可以使用这样的东西:
@
int counter = 1;
foreach (var item in Model.Stuff)
... some code ...
counter = counter + 1;
【讨论】:
【参考方案6】:如果您希望在整个页面上都可以访问某个变量,则最好在文件顶部定义它。 (您可以使用隐式或显式类型。)
@
// implicit type
var something1 = "something";
// explicit type
string something2 = "something";
<div>@something1</div> @*display first variable*@
<div>@something2</div> @*display second variable*@
【讨论】:
【参考方案7】:您可以将所有内容放在一个块中,并轻松地在该块中编写您希望的任何代码,只需以下代码:
@
bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
if (isUserConnected)
// meaning that the viewing user has not been saved
<div>
<div> click to join us </div>
<a id="login" href="javascript:void(0);" style="display: inline; ">join</a>
</div>
它可以帮助您首先获得更清晰的代码,还可以防止您的页面加载多次不同的代码块
【讨论】:
以上是关于如何在 Razor 中声明局部变量?的主要内容,如果未能解决你的问题,请参考以下文章