根据变量的值渲染不同的HTML

时间:2012-02-21 01:43:14

标签: c# asp.net razor

我希望使用C#和Razor语法来检查是否已设置cookie。如果已设置,我想显示

<h2> Cookie set </h2>.

如果没有,我想显示

<h2>Cookie not set</h2>

所以,为了回顾一些事情,我设置了这个cookie:

//set cookie
HttpCookie cookie = Request.Cookies.Get("stackOverflowCookie");
if(cookie == null) {
   cookie = new HttpCookie("stackOverflowCookie");
   cookie.Value = "Hi guys!";
   cookie.Expires = DateTime.Now.AddDays(1);
   Response.Cookies.Add(cookie);

使用Razor,在语法上,渲染我想要的东西的最佳方法是什么?无论我尝试什么都会导致编译错误:

@{
     if(Request.Cookies["stackOverflowCookie"] == null){ 
        //some other logic is here in my actual code, so an inline statement is not sufficient
        <h2> Cookie set </h2>
@}
@{ else {

<h2> Cookie not set </h2>

@}

显然这看起来很可怕,而且不起作用。它确实显示了我想要的功能。实现此功能的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

如果你的if语句逻辑长于单行允许,你只需在代码块中设置一个变量:

@{
    var isCookieSet = Request.Cookies["stackOverflowCookie"] == null && otherConditions;
}

然后你的剃刀代码看起来像这样:

@if (isCookieSet) { 
    <h2>Cookie set</h2>
} else {
    <h2>Cookie not set</h2>
}

答案 1 :(得分:1)

请记住要小心将逻辑放在用户界面(即视图)中。

您可能希望考虑编辑View-Model以包含cookie的值,并使用简单的IF语句根据此变量显示不同的UI:

@if(model.CookieProperty != null) {
  <h2>Cookie is set</h2>
} else {
  <h2>Cookie is not set</h2>
}

然后让控制器读取cookie,并设置View-Model属性:

model.CookieProperty = Request.Cookies["cookieName"];

这样做的好处是:

  • 控制器可能需要“启用功能”或根据此值执行其他逻辑
  • 测试:测试UI元素很困难。轻松测试View-Model。

答案 2 :(得分:0)

您可以尝试类似

的内容
@if(Request.Cookies["stackOverflowCookie"] == null) { 
    <h2> Cookie set </h2>
} else {
    <h2> Cookie not set </h2>
}