代码之家  ›  专栏  ›  技术社区  ›  Robert Koritnik

应在何处为Asp.net MVC视图准备非视图模型对象

  •  0
  • Robert Koritnik  · 技术社区  · 15 年前

    我需要清醒的头脑 提供一些很好的建议,怎样才能把这类事情做到最好。

    问题

    我正在构建一个Asp.net MVC应用程序。我的大多数视图的顶部都有一个工具栏。工具栏上可以有几个不同的项目,如:

    • 按钮
    • 笔记
    • 刷新项(动态宽度空间,用于将一些按钮放在工具栏的最右侧)
    • 等。

    跟随 干燥原理 我创建了一组共享的局部视图( Toolbar , Toolbar.Button 等),以呈现预定义的工具栏对象。这些局部视图当然是强类型的。

    然后我得到了我的强类型视图,其模型与它们显示的数据相关。但他们也经常有一个工具栏。所以在打电话之前 Html.RenderPartial("Toolbar", toolbar) 我得准备这个 IList<ToolbarItemBase> 对象列表将其传递给它。

    问题是我正在准备这些视图本身。对于特定页面,此工具栏对象列表始终相同,并且也是本地化的。工具栏按钮项也有 Url 使用设置的属性 Url.Action() helper,这使得无法将序列化的工具栏实例简单地存储在数据库中问题是这些工具栏定义可能会变得非常大(想想单词ribbon和其中的项目数量)

    问题

    你有什么建议,我应该在哪里创建我的本地化工具栏实例,而不混乱的视图的代码?因为它们根本不会改变,它们很可能是静态的,我猜。。。

    2 回复  |  直到 15 年前
        1
  •  1
  •   OdeToCode    15 年前

    我会考虑在ASP.NET MVC 3中使用Action/RenderAction帮助程序。

    基本上,Action helper让我们为控制器操作设置一个“子请求”,该操作可以构建模型并呈现部分视图(部分视图的结果将呈现到使用@Html.Action(…)的外部视图中)。

    所以。。。在您的场景中,您将有一个控制器操作专用于为工具栏构建视图模型,并将工具栏部分呈现。使用需要工具栏的布局或内容视图中的Html.action调用此操作。

    希望能帮上忙,

        2
  •  0
  •   user151323user151323    15 年前

    为所有启用工具栏的视图引入一个基本模型,并在其中准备工具栏数据。

    我可能会被否决,但你有没有考虑过回到网络表单而不是MVC?如果您的目的是模仿桌面应用程序接口的所有功能和复杂性,MVC可能不是您的正确工具。简而言之,MVC是用于web站点的,WebForms是用于web应用程序的。

    推荐文章