如何在Razor中声明局部变量?

von*_*dip 339 .net c# asp.net-mvc razor asp.net-mvc-3

我正在asp.net mvc 3中开发一个Web应用程序.我对它很新.在使用剃刀的视图中,我想声明一些局部变量并在整个页面中使用它.如何才能做到这一点?

能够执行以下操作似乎相当微不足道:

@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>
}
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*son 497

我觉得你很亲密,试试这个:

@{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>
}
Run Code Online (Sandbox Code Playgroud)

  • 哦,我自己发现了它:`@Code .. End Code`而不是`@ {..}` (6认同)
  • @Abhijeet.Nagre,在问题中他写道:`@bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);`但是变量定义必须位于“代码块”内。我无法给出更好的答案来解释为什么,这就是剃须刀的工作原理。 (2认同)
  • @AbhijeetNagre - Razor**通常**非常善于理解代码的开始和结束位置,但它并不完美.有时候我们只需要给它一些关于什么应该被视为Razor/C#的暗示,以及什么不应该.如果你遇到Razor错误,添加`{}`标签通常是第一步 (2认同)

Kha*_*sha 49

我认为变量应该在同一个块中:

@{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>
    }
    }
Run Code Online (Sandbox Code Playgroud)


mar*_*cel 18

您还可以使用:

@if(string.IsNullOrEmpty(Model.CreatorFullName))
{
...your code...
}
Run Code Online (Sandbox Code Playgroud)

代码中不需要变量

  • 这并没有提供问题的答案. (6认同)

Bri*_*ian 13

如果你正在寻找一个int变量,一个随着代码循环而递增的变量,你可以使用这样的东西:

@{
  int counter = 1;

  foreach (var item in Model.Stuff) {
    ... some code ...
    counter = counter + 1;
  }
} 
Run Code Online (Sandbox Code Playgroud)


alo*_*ica 9

不是OP问题的直接答案,但它也可能对你有所帮助.您可以在范围内的某个html旁边声明一个局部变量而不会出现问题.

@foreach (var item in Model.Stuff)
{
    var file = item.MoreStuff.FirstOrDefault();

    <li><a href="@item.Source">@file.Name</a></li>
}
Run Code Online (Sandbox Code Playgroud)