与MVC剃刀视图的字符串比较

时间:2016-05-09 19:38:38

标签: asp.net-mvc razor

我正在尝试使用以下方法比较字符串,但它不会进入if循环

newsNs.to('political').emit(payload)

1 个答案:

答案 0 :(得分:3)

确保您的价值观正确

您可以考虑检查以确保您的ViewData["value"]实际上包含您所期望的内容。你在Controller中设置了吗?

尝试在View中添加一个断点,并检查它看起来像下面的语句或Watch窗口:

@{ 
       // Place a breakpoint here
       var section = Convert.ToString(ViewData["value"]);
}

检查您的情境

如果您已经处于循环的上下文中,则不应该使用@字符为if语句添加前缀。

@foreach(var foo in bar){
    // Notice that no leading @ is required here 
    if(...){

    }
    else if (...){

    }
}

明确分隔<text>代码

如果您不在上下文中且明确想要从代码中识别标记,则可以使用<text>标记:

@if (Convert.ToString(ViewData["value"]) == "Exit")
{  
   <text>
       <div style="width:100%; border-top:1px solid #999999; padding-top:10px;">
          <!-- Your Code Here -->
       </div>
   </text>
}

合并语句

此外,您的两个语句似乎当前输出相同的代码。您可以考虑使用以下方法将这些合并为单个语句:

@if (new[]{ "Exit", "SessionTimedOut"}.Contains(Convert.ToString(ViewData["value"])){  
    <div style="width:100%; border-top:1px solid #999999; padding-top:10px;">
        <!-- Your code here -->
    </div>
}

否则,您可以考虑使用switch语句更清晰地分隔查询:

@switch(Convert.ToString(ViewData["value"])){
     case "Exit":
          <!-- Your Markup for Exit Here -->
     break;
     case "SessionTimedOut":
          <!-- Your Markup for SessionTimedOut Here -->
     break;
}