所以我在.net Razor中有以下代码:

<div id="menu_left" class="menu_item">

    @foreach (var mainMenuItem in Model)
            {

                    string link ="";
                    string nameLower = @mainMenuItem.ItemName.ToLower();
                    if (mainMenuItem.SubItem.Count() > 0)
                                  {
                                    link +="javascript:submenu('";
                                    link += nameLower + "_dropdown";
                                    link += "', 'dropdown_menu' );";
                                  }
                     else
                                  {
                                         link = mainMenuItem.Link;
                                  }
                      }

                <a href="@link" class="menu_a">
                    <img src="@mainMenuItem.Image" class="menu_link" id="@mainMenuItem.ItemName.ToLower()" />
                </a>

            }

    </div>


但是,当我尝试运行它时,.net编译器将if语句末尾的行作为html文字呈现,而不是将其编译为代码,如编译源的以下部分所示:

Line 145:  WriteLiteral(@"                         else
Line 146:                                        {
Line 147:                                               link = mainMenuItem.Link;
Line 148:                                        }
Line 149:                            }


我尝试将整个内容包装在@ {}代码块中,以便知道它是代码,但是随后编译器似乎将该块放在错误的大括号内,例如在foreach循环末尾。

我曾在SO上看到其他人,如果'if'语句中有html,但是在此块中没有html时,也有同样的问题。

如何将其余代码呈现为代码?

最佳答案

从......中去除

 @mainMenuItem.ItemName.ToLower();


在启动c#代码并将其与html混合时,只需要@符号。

例如,在这种情况下,您将需要@符号来呈现nameLower的值:

@foreach (var mainMenuItem in Model)
{

    string link = "";
    string nameLower = mainMenuItem.ItemName.ToLower();

    <div>
        some html
        @nameLower
    </div>
}

关于c# - Razor:if语句后未渲染foreach块的末尾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36520883/

10-17 02:42