C# Razor MVC 3中变量的范围是什么

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 =&

我的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 => 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你的想法是对的。单语句或多行。我认为你的问题在于嵌套括号和表标记多于彼此。应该有清晰的嵌套层次。谢谢你的建议。可能是“错”而不是“奇怪”语法:)。请参阅我下面关于@{}与@的问题。