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

时间:2013-04-11 12:55:27

标签: 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 => 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>

我的代码无法引用myClient.Type。如果我删除了周围的@{},那么我会在HTML中获得c#代码。

我知道一些简单的事情,但我没有看到它。

非常感谢任何帮助。

编辑:表格已关闭。

2 个答案:

答案 0 :(得分:2)

试试这个:

<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赋值放入它自己的块中。我打开和关闭<tr><td>来匹配并将它们放在可选@if blocks之外。但是这个版本会编译。

答案 1 :(得分:1)

这里有奇怪的语法:

@{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>

表格未关闭,您已打开<td>代码