【问题标题】:Merge ViewModel合并视图模型
【发布时间】:2012-03-03 16:45:05
【问题描述】:

我正在启动 MVC,希望您对 Repositories 和 View 模型提出建议,特别是将几组存储库数据组合到一个 VM 中。

如果我有一个包含三个不同部分(列)的网页,这些部分(列)需要它们自己的存储库(对不起,这是基本性质):

UserInfoData - 显示在左列

DiaryData - 显示在中间列

CommentData - 右列显示

我正在做以下事情:-

public ActionResult Index(int id)
{
  UserInfoData uid = repository.GetUserInfoData(id);
  UserInfoDataVM UserViewModel = Mapper.Map<UserInfoData, UserInfoDataVM>(uid);

  //RETRIEVE DiaryData & CommentData using same principle as above

  return ??
}

如何将这三个虚拟机组合成可以返回视图的东西 - 我是否使用另一个接受这三个虚拟机的虚拟机?

在处理具有自己数据的网页的较小部分时,是否有最佳做法?

【问题讨论】:

    标签: asp.net-mvc repository viewmodel


    【解决方案1】:

    在我看来,这取决于您的使用场景。

    您可以创建一个包含三个子视图模型的视图模型,但您需要问自己,我会在其他任何地方使用这三个子视图模型中的任何一个吗?如果没有,那么您可以只使用一个大视图模型。否则,封装较小视图模型的“包装器”视图模型没有任何问题。

    您可以保留上面定义的三个视图模型,并且可以在视图中使用 Html.RenderAction 语法来实际获取页面的每个子部分。您应该在控制器上定义一个动作,其职责是填充每个小视图模型并返回该模型的视图。

    <div id="leftCol">
       @{Html.RenderAction("LeftCol", "Controller");}
    </div>
    <div id="midCol">
       @{Html.RenderAction("MiddleCol", "Controller");}
    </div>
    <div id="rightCol">
       @{Html.RenderAction("RightCol", "Controller");}
    </div>
    

    这将使您能够在站点的任何位置使用子部分,您只需定义一次操作方法和部分视图。

    第二个选项也是个人最喜欢的选项,因为如果这些部分需要几秒钟来填充和呈现(如果这对您的页面有意义),您可以快速利用 JQuery 进行部分页面加载。现在,您的页面会快速打开,您有一个 JS 函数来获取这些部分,在它们上面放置一些加载图形,并使用 AJAX 请求加载/呈现。同样,仅当这对您有意义时,使用 Partial Views/Render 操作方法通常会为您在跨站点重用和 AJAX 部分页面呈现方面提供更大的灵活性。

    【讨论】:

    • 感谢 Tommy,这对我很有帮助,Html.RenderAction 看起来很有前途,而且 jQuery 看起来也不错,我打算考虑一下网站设计并好好利用这两种技术。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-02
    • 2023-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    相关资源
    最近更新 更多