1

我正在尝试将几个 if 语句添加到剃须刀页面。我正在更改的页面在更改之前工作,但是当我添加在下面的代码示例中突出显示的块时,我收到此错误:

加载 Razor 脚本时出错 ~/macroscripts/genericpage.cshtml 代码块缺少结束“}”字符。确保此块中的所有“{”字符都有一个匹配的“}”字符,并且没有一个“}”字符被解释为标记。

if (publishedRightHandPods.Any())
{
    foreach(var rh in publishedRightHandPods)
    {   
        if (rh.image.GetType() == typeof(DynamicXml))
        {               
            if (rh.link.GetType() == typeof(DynamicXml))
            {
                var linkSupplied = !String.IsNullOrEmpty(rh.link.url) && !String.IsNullOrWhiteSpace(rh.link.url);
                var titleSupplied = !String.IsNullOrEmpty(rh.title) && !String.IsNullOrWhiteSpace(rh.title);

                @* *************** *@
                @* I'M ADDING THIS *@                   
                @* *************** *@

                @{
                  if (linkSupplied) {
                    <a href="@(rh.link.url)">
                  }
                }

                @* ****************** *@
                @* END OF ADDED BLOCK *@                    
                @* ****************** *@

                   <div class="side-pod" style="background: url('@(rh.image.mediaItem.Image.umbracoFile)') no-repeat scroll 0 0 transparent; height: @(rh.image.mediaItem.Image.umbracoHeight)px">
                       @{
                           if (titleSupplied)
                           {
                               <h2 class="title" style="color: #@(rh.textColour);">@Html.Raw(rh.title.ToString())</h2>
                           }
                       }
                       @{
                           if (!String.IsNullOrEmpty(rh.linkText) && !String.IsNullOrWhiteSpace(rh.linkText) && !String.IsNullOrEmpty(rh.link.url) && !String.IsNullOrWhiteSpace(rh.link.url))
                           {
                               <a class="findoutmore-btn" href="@(rh.link.url)">@(rh.linkText)</a>
                           }
                       }
                   </div>

                @* *************** *@
                @* I'M ADDING THIS *@                   
                @* *************** *@

                @{
                  if (linkSupplied) {
                    </a>">
                  }
                }

                @* ****************** *@
                @* END OF ADDED BLOCK *@                    
                @* ****************** *@

            }
      }
 }

我不明白为什么里面的 if 语句<div>是有效的,但是当我在 div 之外添加新的(类似的)语句时,我得到了错误。

****更新****

如果我删除我添加的 if 语句周围的 @{},如下所示:

if (linkSupplied) {
    <a href="@(rh.link.url)">
}

我在屏幕上看到这个:

可以看到的图像是应用于 div 的背景

4

3 回答 3

3

当您需要在if语句中打开 HTML 标记但又不想关闭它时,我建议您使用@Html.Raw()

@if (linkSupplied) { @Html.Raw(string.Format("<a href=\"{0}\">", rh.link.url)) }

...然后,当您关闭A标签时...

@if (linkSupplied) { @Html.Raw("</a>") }

于 2013-09-20T08:46:23.710 回答
2

在第二个 if 语句的最后一个结束标记之后,您有一个额外的撇号和更大的 then 符号:

@{
                  if (linkSupplied) {
                    </a>">
                  }
                }
于 2013-09-20T06:53:02.763 回答
1

尝试使用全局 @{} 而不是在每个部分都使用它。标记将在剃刀语法中正常工作。通过这种方式,您可以简化代码。

于 2013-09-20T08:52:48.023 回答