如何在 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 */ &lt;div&gt;Connected? @isUserConnected&lt;/div&gt; 之类的操作(这对字符串更有效)。但它在该文件之外不可用(例如,您必须在部分中单独声明它)。【参考方案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 中声明局部变量?的主要内容,如果未能解决你的问题,请参考以下文章

js中怎么把一个变量变成全局变量

如何防止声明为局部变量的对象在堆栈中分配?

全局变量和局部变量的区别

如何在没有扩展内联 asm 的情况下在 gcc 内联汇编中声明和初始化局部变量?

如何初始化声明为局部变量的记录?

编译器如何在堆栈上安排局部变量?