MVC 3中“图形”if语句的最佳实践

时间:2011-02-24 13:14:25

标签: asp.net-mvc asp.net-mvc-3

刚开始从经典ASP转换为MVC,并想知道用于判断HTML元素是否可见的if语句的最佳实践,或者决定该HTML元素是否应该可见。

实施例:

if (type = 1)
{
    <img src="/Content/Images/gray.jpg" />
}
else
{
    <img src="/Content/Images/blue.jpg" />
}

我在这里看到了几个选项。
1.在我的观点中使用if语句(不愿意)
2.使用HTML帮助程序(将有很多帮助者=难以使用代码)
3.在我的控制器中创建HTML-snippets并传递到我的视图中 4.使用JavaScript在文档加载时显示/隐藏元素。

上面的例子当然是我的问题的简化。非常感谢您的帮助!
/麦克

编辑: 这是一个坏的例子,这里有一个新的:

if (type = 1)
{
    <span class="class1">Something something</span>
}
else
{
    <div id="id1">
        text 
        <img src="/Content/Images/gray.jpg" />
    </div>
}

2 个答案:

答案 0 :(得分:3)

我个人开始使用单独的图层来加载具有特定于html信息的viewmodels。

 public class ViewModel
 {
     public string ImageName { get; set; }
 }

保持视图清洁:

<img src="/Content/Images/<%= Model.ImageName %>.jpg" />

答案 1 :(得分:1)

我个人更喜欢使用HtmlHelper扩展或声明性HTML帮助程序,除了最简单的条件表达式。但是在这种情况下,我可能会让我的懒惰获胜,并直接在视图中表达条件:

<img src="/Content/Images/@(i == 1 ? "gray" : "blue").jpg" />

修改

对于更复杂的场景,肯定是HTML助手。如果您正在使用Razor语法,则可以通过将它们放入〜/ Views / Helpers目录来创建声明性帮助程序。他们写作和使用都很干净。

但创建一个好帮手背后的想法是它封装了一个意图。通过尝试为您的助手命名,这很容易测试。如果名称为IfOneThenShowSomethingElseGrayImage,您应该尝试将其分成更多部分。

因此,让我们假设您的示例中的意图是根据用户类型显示有关当前用户的信息。您可以创建一个这样的帮助器:

@helper UserType(int type) {
   @if (type == 1) {
    <span class="class1">Something something</span>
   } else {
    <div id="id1">
        text 
        <img src="/Content/Images/gray.jpg" />
    </div>
   }    
}

然后在你的视图中使用它:

@UserType(Model.UserType)

尽管它只在一个页面上使用,但它增强了视图的可读性,并且可以在必要时重复使用。

只是我的两分钱。