“如果”在ASP.NET MVC View(.aspx)文件中被视为有害?

时间:2010-01-11 13:20:50

标签: asp.net-mvc architecture coding-style

我记得看到一个博客(或其他)说你不应该使用<%if ...%>在ASP.NET MVC中的.aspx文件中,但我不记得它所说的替代方案是什么。任何人都能记得看到这一点并指出我吗?

7 个答案:

答案 0 :(得分:10)

基本上它意味着你的视图中不应该包含巨大的if语句,你的控制器和ViewModel应该能够处理逻辑。例如:

<h2 class="title">
    <% if (ViewData["category"] == null { %>
        All Products
    <% } else { % >
        <%= ViewData["category"] %>
    <% } %>
</h2>

应该是:

<h2 class="title>
    <%= Model.Title %>
</h2>

如果您的控制器和ViewModel无法处理逻辑,您应该为更复杂的逻辑编写Html Helper(从而使其可重用且更具可读性)。

<h2 class="title>
    <%= Html.GetPageTitle(Model.Category) %>
</h2>

答案 1 :(得分:9)

我认为你所指的是post by Rob Conery,他提到了他使用的规则:

  

如果有if,请提供帮助

所以要回答你的问题,我们的想法是,如果你发现自己需要在视图中使用if,你应该考虑添加一个帮助扩展方法来代替你的View部分。

答案 2 :(得分:2)

我不确定这是不是你所看到的,但是here是一个提到它的博客。见第11项。

答案 3 :(得分:2)

我认为最好的方法是尝试在控制器中处理if条件并传递特定视图以获取所需结果,或者将视图名称传递给变量以进行渲染。

public class HomeController :Controller
{
    public ActionResult Category(string? category)
    {
       View viewToReturn;
       if (category == null)
          viewToReturn = View("CategoryList", repo.GetAllCategory); /// it is a View
       else
          viewToReturn = View("Category", repo.GetCategory(category)); /// it is a View

       return viewToReturn;
    }
}

嗯,马丁的回答也来自最佳实践。

答案 4 :(得分:0)

我觉得这很好。它允许视图控制其显示。

答案 5 :(得分:0)

我怀疑这一点是试图避免使用意大利面条代码而不是限制使用“if”s,这里是Rob Conery博客关于此的链接,他确实提到使用助手代替Ifs所以这可能是你所看到的ASP.NET MVC: Avoiding Tag Soup

答案 6 :(得分:0)

这是你所指的问题吗?

绑定表达式不能在语句块&lt; %%&gt;中使用,就像 语句不能用于绑定表达式块&lt;%#%&gt;

- 布鲁斯(sqlwork.com)

“Jason”&lt;&gt;在消息中写道 消息:23C11F83-A2AA-406D-BDEC -...

  

我的aspx页面中的以下if语句有什么问题?

      “T”然后%&gt;      

我收到的错误是:BC30201:预期表达。

布鲁斯巴克