C# Razor MVC 3中变量的范围是什么
我的Razor代码中的C# Razor MVC 3中变量的范围是什么,c#,asp.net,asp.net-mvc,asp.net-mvc-3,razor,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Razor,我的Razor代码中的myClient变量范围有问题。我相信解决办法很简单。基本上,我是在一个单独的@{}块中引用它,这可能是导致问题的原因,但似乎除非我这样做,否则我会在HTML中获得if..{}代码 @{ int i = 0; foreach (var item in Model.Clients) { Int32 myId = Convert.ToInt32(item.DBID); var myClient = db.Client.Where(c =&
myClient
变量范围有问题。我相信解决办法很简单。基本上,我是在一个单独的@{}
块中引用它,这可能是导致问题的原因,但似乎除非我这样做,否则我会在HTML中获得if..{}
代码
@{
int i = 0;
foreach (var item in Model.Clients)
{
Int32 myId = Convert.ToInt32(item.DBID);
var myClient = db.Client.Where(c => c.Id == myId).First();
<td>
<table class="inner">
<tr><th>
@string.Format(
"{0} {1} {2}",
myClient.Title,
myClient.Initials,
myClient.LastName)
@{
if (myClient.Type!="Primary")
{
@Html.ActionLink(
"Delete",
"Delete",
"ClientBackground",
new { id=item.ID }, null)
}
}
</th></tr>
}
<table>
@{
int i=0;
foreach(Model.Clients中的var项)
{
Int32 myId=Convert.ToInt32(item.DBID);
var myClient=db.Client.Where(c=>c.Id==myId.First();
@字符串格式(
"{0} {1} {2}",
我的客户,头衔,
我的客户,姓名首字母,
myClient.LastName)
@{
if(myClient.Type!=“主”)
{
@Html.ActionLink(
“删除”,
“删除”,
“客户背景”,
新的{id=item.id},null)
}
}
}
我的代码不能引用myClient.Type
。如果我删除了周围的@{}
,那么我会在HTML中得到c代码
@{
int i = 0;
foreach (var item in Model.Clients)
{
Int32 myId = Convert.ToInt32(item.DBID);
var myClient = db.Client.Where(c => c.Id == myId).First();
<td>
<table class="inner">
<tr><th>
@string.Format(
"{0} {1} {2}",
myClient.Title,
myClient.Initials,
myClient.LastName)
@{
if (myClient.Type!="Primary")
{
@Html.ActionLink(
"Delete",
"Delete",
"ClientBackground",
new { id=item.ID }, null)
}
}
</th></tr>
}
<table>
我知道一些简单的事情,但我看不到
非常感谢您的帮助
编辑:表格已关闭。请尝试以下操作:
<table class="inner">
@{int i = 0;}
@foreach (var item in Model.Clients)
{
Int32 myId = Convert.ToInt32(item.DBID);
var myClient = db.Client.Where(c => c.Id == myId).First();
<tr><td>@string.Format("{0} {1} {2}",myClient.Title,myClient.Initials,myClient.LastName)
@if (myClient.Type!="Primary")
{
@Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null)
}
</td></tr>
}
</table>
@{int i=0;}
@foreach(Model.Clients中的var项)
{
Int32 myId=Convert.ToInt32(item.DBID);
var myClient=db.Client.Where(c=>c.Id==myId.First();
@string.Format(“{0}{1}{2}”,myClient.Title,myClient.Initials,myClient.LastName)
@if(myClient.Type!=“主”)
{
@ActionLink(“Delete”、“Delete”、“ClientBackground”、新的{id=item.id},null)
}
}
我对格式做了很多猜测。重要的是,我将您的int赋值放入它自己的块中。我将开始和结束
和
放在匹配的块中,并将它们放在可选的@if块
之外。但是这个版本将编译。奇怪的语法:
@{if (myClient.Type!="Primary")
{
@Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null)
}
}
为什么不:
@if (myClient.Type!="Primary")
{
@Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null)
}
添加:
您更新的代码具有无效的html标记,它应该类似于:
<table class="inner">
@{
int i = 0;
foreach (var item in Model.Clients)
{
Int32 myId = Convert.ToInt32(item.DBID);
var myClient = db.Client.Where(c => c.Id == myId).First();
<tr><th>
@string.Format("{0} {1} {2}", myClient.Title, myClient.Initials, myClient.LastName)
@if (myClient.Type!="Primary")
{
@Html.ActionLink("Delete", "Delete", "ClientBackground", new { id=item.ID }, null)
}
</th></tr>
}
</table>
@{
int i=0;
foreach(Model.Clients中的var项)
{
Int32 myId=Convert.ToInt32(item.DBID);
var myClient=db.Client.Where(c=>c.Id==myId.First();
@string.Format(“{0}{1}{2}”,myClient.Title,myClient.Initials,myClient.LastName)
@if(myClient.Type!=“主”)
{
@ActionLink(“Delete”、“Delete”、“ClientBackground”、新的{id=item.id},null)
}
}
表未关闭,而您已打开
标记请发布您的整个代码块。在
和
关闭的地方,我最初没有将其放入,因为我认为我不需要它来解决问题。无论如何,我现在已经打开了,请参阅编辑。再次感谢。谢谢,这很有效。出于兴趣,{}还有@。我的怀疑是前者封装了多行代码。我假设一个人可以从@{}中访问变量包。我想我发现我的问题不在于变量作用域。@SamJolly你的想法是对的。单语句或多行。我认为你的问题在于嵌套括号和表标记多于彼此。应该有清晰的嵌套层次。谢谢你的建议。可能是“错”而不是“奇怪”语法:)。请参阅我下面关于@{}与@的问题。