【问题标题】:How to declare a local variable in Razor?如何在 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>
}

但这不起作用。这可能吗?

【问题讨论】:

    标签: c# .net asp.net-mvc asp.net-mvc-3 razor


    【解决方案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>
                  }
              }
          

          它可以帮助您首先获得更清晰的代码,还可以防止您的页面加载多次不同的代码块

          【讨论】:

            猜你喜欢
            • 2016-10-25
            • 2011-03-10
            • 2014-04-10
            • 1970-01-01
            • 1970-01-01
            • 2020-10-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多