【问题标题】:Is right use strongly-typed partial views?正确使用强类型的局部视图吗?
【发布时间】:2009-08-13 15:11:18
【问题描述】:

我正在用 ASP.NET MVC 开发一个小应用程序。

这个应用程序有很多“HTML 片段”,这些片段被多次使用,但略有差异。

对于这些片段,我使用的是强类型部分视图

我的问题是:这是在视图层重用代码的正确方法吗?使用局部视图有什么不便之处吗?

非常感谢。

【问题讨论】:

    标签: asp.net-mvc oop strongly-typed-view


    【解决方案1】:

    就我个人而言,我认为这是减少 HTML 中的重复并一直这样做的好方法。只是避免与它们做你应该通过嵌套母版页等做的事情。

    根据经验,您不应该嵌套局部视图。

    【讨论】:

    • 该死,还有人比我快几秒。
    【解决方案2】:

    我发现强类型视图,无论是“完整”还是部分视图都非常有益。否则你会被大量的ViewData 代码困住,这些代码不美观且难以调试。

    如果您发现自己为了让模型正常工作而费尽心思,请考虑将较小的模型包装在较大的“上下文”类型对象中:

    public class ViewModelA {
        public string Name { get; set; }
    }
    
    public class ViewModelB {
        public int Id { get; set; }
    }
    
    public class ViewModelContext {
        public ViewModelA { get; set; }
        public ViewModelB { get; set; }
    }
    

    并让您的视图将ViewModelContext 作为类型。这将让您快速访问所有其他模型。

    【讨论】:

      【解决方案3】:

      通常我会在 MasterPage 中放置很多通用代码。我将部分视图用于更大、独立的功能单元。例如,在许多但不是所有页面或标题登录“控件”中重复使用的网格。有时它是两者的结合。例如,未经身份验证的主菜单项出现在 MasterPage 标记中,但我对经过身份验证的菜单项使用部分视图,其中包含根据用户角色处理哪些项目显示的逻辑。

      对于小型 HTML sn-ps,您可能要考虑的另一件事是 HtmlHelper 扩展。我发现这是设置特定种类的 HTML 元素的好方法。例如,我有一个扩展,它将添加一个“按钮”,该按钮将与启用 javascript(呈现为锚)或禁用(呈现 noscript 标记内的按钮)一起使用。无论如何,在我看来,这种东西作为扩展比局部视图更好,因为它并不是对任何事物的真正“视图”。

      【讨论】:

        【解决方案4】:

        我认为这是一件好事。特别是如果您希望您的不同页面使用相同的行为:例如,我将 mvccontrib 寻呼机放在共享文件夹中,因此我所有的寻呼机看起来都一样。

        目前我对局部视图只有一个不便:在 ajax 中使用局部视图更新我的容器的一部分时,并不总是考虑这个局部视图的 javascript。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多