c#razor如果声明不起作用

时间:2015-09-03 12:10:58

标签: c# razor

我被要求对Umbraco的网页进行一些更改,其中我几乎不了解C#。

这是代码中令人讨厌的一点:

@foreach (DynamicNode child in root.Children)
        {
            string image = @child.GetProperty("image").Value;
            var imgURL = Model.MediaById(image).url;
            var extURL = @child.GetProperty("externalURL").Value;
            var fullURL = "http://" + extURL;

            string externalLinks = child.GetProperty("externalDocuments").Value;
            string downloadsFolderId = @child.GetProperty("downloadsFolder").Value;
            string brandName = child.GetProperty("brandName").Value;
            bool brandCheck = brandName.Contains("Generic");

            if (brandCheck == true)
            {
              string brandHeader = "<h2 class='blue' title='"+@child.GetProperty("brandName").Value+"'>"+@child.GetProperty("brandName").Value+" <span></span></h2>";
            }
            else
            {
              string brandHeader = "<h2 class='red' title='"+@child.GetProperty("brandName").Value+"'>"+@child.GetProperty("brandName").Value+" <span></span></h2>";
            }

            //Links
            <span style="display:none" id="tester" >@brandCheck</span>
            <div class="brand-container">
                @Html.Raw(brandHeader)

所以基本上我需要检查返回的产品名称是否包含字符串“Generic”。如果是,则应用“蓝色”类,如果不应用“红色”类 - 听起来很容易。

字符串搜索工作正常,因为隐藏的@brandCheck会相应地返回true或false值。另外,如果我删除if语句并定义字符串brandHeader,它将在(在上面的代码中)最后一行(@html.Raw(brandHeader))正确生成。

显然问题是if语句。我试过了:

  • if(brandCheck == true)
  • if(brandCheck === true)
  • if(brandCheck =='true')
  • if(brandCheck ==='true')
  • 如果(brandCheck)

但似乎没有任何效果,if语句会使脚本崩溃。我错过了什么或做错了什么?

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

尝试并替换

bool brandCheck = brandName.Contains("Generic");

if (brandCheck == true)
{
     string brandHeader = "<h2 class='blue' title='"+@child.GetProperty("brandName").Value+"'>"+@child.GetProperty("brandName").Value+" <span></span></h2>";
}
else
{
     string brandHeader = "<h2 class='red' title='"+@child.GetProperty("brandName").Value+"'>"+@child.GetProperty("brandName").Value+" <span></span></h2>";
}

string brandHeader = string.Format("<h2 class='{0}' title='"+@child.GetProperty("brandName").Value+"'>"+@child.GetProperty("brandName").Value+" <span></span></h2>", brandName.Contains("Generic") ? "blue" : "red");

答案 1 :(得分:0)

if-clause不是你的程序崩溃,而是你的

string brandHeader 

仅在if子句中定义。

如果您以后访问它,它将不再被定义,导致您的脚本崩溃(换句话说:一旦您离开if子句,您的string brandHeader超出范围)。

作为解决方法,请填写

string brandHeader;
在if子句之外的

,在if子句中只按

分配值
brandheader = < value >;

开头没有字符串。