如果或者在视图或控制器中声明

时间:2012-01-13 02:05:22

标签: asp.net-mvc-3

在(视图)中创建(if)和(else)语句时遇到问题。声明的目的是隐藏以下代码:

<div id="clearbuton"><p>@Html.ActionLink("Clear", "")</p>

<p> @String.Format("Total of {0} results", ViewBag.CountRecords)

  </div>

视图是隐藏代码的最佳位置还是控制器更适合任务。

只有在搜索查询不为null时才会显示代码。下面的代码是搜索表单。

@using (Html.BeginForm())
{  <div id="borderSearch">
    @Html.TextBox("searchString", "")
    </div>
    <input type="submit" value="Search News Archives" />
}

来自控制器的一些代码:

 if (Request.HttpMethod == "GET")
            {
                searchString = search;
            }
            else if (searchString == "")
            {
                return RedirectToAction("ErrorSearch");
            }

            else
            {
                page = 1;
            }
            ViewBag.search = searchString;

欢迎任何有关如何实现这一目标的建议。

2 个答案:

答案 0 :(得分:5)

好吧,如果我完全理解你的问题,我不是百分百肯定,但是如果我听到你的话,你不确定如何在第一段代码和/或你是否附上if语句应该这样做。

首先,这是“如何” - 你只是使用@if(请原谅我,如果这看起来很明显 - 我不是想侮辱你的智慧):

@if (!string.IsNullOrEmpty(ViewBag.search))
{
    <div id="clearbuton"><p>@Html.ActionLink("Clear", "")</p>

    <p> @String.Format("Total of {0} results", ViewBag.CountRecords)</p>

    </div>
}

现在推理 - 你应该在视图中放一个“if”语句来显示或隐藏HTML吗?是的,一点没错。这就是MVC中为视图设计的内容。控制器用于执行查询和计算结果计数以及操作数据,但是视图需要获取结果并实际呈现它们为HTML。因此,在这种情况下,我们依靠控制器来设置ViewBag.search的值,然后基于此,视图可以显示或隐藏特定的HTML块。控制器不会(也不应该)知道HTML。

这会回答你的问题吗?

P.S.-如果您有兴趣,这里有一个关于Razor语法的方便快速参考:
http://haacked.com/archive/2011/01/06/razor-syntax-quick-reference.aspx

答案 1 :(得分:3)

@if(!string.IsNullOrEmpty(ViewBag.Search))
{
    <div id="clearbuton">
        <p>@Html.ActionLink("Clear", "")</p>
        <p> @String.Format("Total of {0} results", ViewBag.CountRecords)</p>
    </div>
}

请参阅this blog post from ScottGu