我正在用 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>
}
但这不起作用。这可能吗?
我认为你很接近,试试这个:
@{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>
}
我认为变量应该在同一个块中:
@{
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>
}
}
isUserConnected
吗?
@if (isUserConnected) { /* stuff if connected */ }
或 <div>Connected? @isUserConnected</div>
之类的操作(这对字符串更有效)。但它在该文件之外不可用(例如,您必须在部分中单独声明它)。
您还可以使用:
@if(string.IsNullOrEmpty(Model.CreatorFullName))
{
...your code...
}
代码中不需要变量
不是对 OP 问题的直接回答,但它也可能对您有所帮助。您可以在范围内的某个 html 旁边声明一个局部变量,而不会遇到麻烦。
@foreach (var item in Model.Stuff)
{
var file = item.MoreStuff.FirstOrDefault();
<li><a href="@item.Source">@file.Name</a></li>
}
如果你正在寻找一个 int 变量,一个随着代码循环而递增的变量,你可以使用这样的东西:
@{
int counter = 1;
foreach (var item in Model.Stuff) {
... some code ...
counter = counter + 1;
}
}
如果您希望在整个页面上都可以访问变量,则最好在文件顶部定义它。 (您可以使用隐式或显式类型。)
@{
// implicit type
var something1 = "something";
// explicit type
string something2 = "something";
}
<div>@something1</div> @*display first variable*@
<div>@something2</div> @*display second variable*@
您可以将所有内容放在一个块中,并轻松编写您希望在该块中的任何代码,只需以下代码:
@{
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>
}
}
它可以帮助您首先获得更清晰的代码,还可以防止您的页面加载多次不同的代码块
@Code .. End Code
而不是@{ .. }
@bool isUserConnected = string.IsNullOrEmpty(Model.CreatorFullName);
但变量定义必须在“代码块”内。我无法给出更好的答案来解释为什么会这样,这就是剃须刀的工作原理。{ }
标签