【发布时间】:2009-08-13 15:11:18
【问题描述】:
我正在用 ASP.NET MVC 开发一个小应用程序。
这个应用程序有很多“HTML 片段”,这些片段被多次使用,但略有差异。
对于这些片段,我使用的是强类型部分视图。
我的问题是:这是在视图层重用代码的正确方法吗?使用局部视图有什么不便之处吗?
非常感谢。
【问题讨论】:
标签: asp.net-mvc oop strongly-typed-view
我正在用 ASP.NET MVC 开发一个小应用程序。
这个应用程序有很多“HTML 片段”,这些片段被多次使用,但略有差异。
对于这些片段,我使用的是强类型部分视图。
我的问题是:这是在视图层重用代码的正确方法吗?使用局部视图有什么不便之处吗?
非常感谢。
【问题讨论】:
标签: asp.net-mvc oop strongly-typed-view
就我个人而言,我认为这是减少 HTML 中的重复并一直这样做的好方法。只是避免与它们做你应该通过嵌套母版页等做的事情。
根据经验,您不应该嵌套局部视图。
【讨论】:
我发现强类型视图,无论是“完整”还是部分视图都非常有益。否则你会被大量的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 作为类型。这将让您快速访问所有其他模型。
【讨论】:
通常我会在 MasterPage 中放置很多通用代码。我将部分视图用于更大、独立的功能单元。例如,在许多但不是所有页面或标题登录“控件”中重复使用的网格。有时它是两者的结合。例如,未经身份验证的主菜单项出现在 MasterPage 标记中,但我对经过身份验证的菜单项使用部分视图,其中包含根据用户角色处理哪些项目显示的逻辑。
对于小型 HTML sn-ps,您可能要考虑的另一件事是 HtmlHelper 扩展。我发现这是设置特定种类的 HTML 元素的好方法。例如,我有一个扩展,它将添加一个“按钮”,该按钮将与启用 javascript(呈现为锚)或禁用(呈现 noscript 标记内的按钮)一起使用。无论如何,在我看来,这种东西作为扩展比局部视图更好,因为它并不是对任何事物的真正“视图”。
【讨论】:
我认为这是一件好事。特别是如果您希望您的不同页面使用相同的行为:例如,我将 mvccontrib 寻呼机放在共享文件夹中,因此我所有的寻呼机看起来都一样。
目前我对局部视图只有一个不便:在 ajax 中使用局部视图更新我的容器的一部分时,并不总是考虑这个局部视图的 javascript。
【讨论】: