2012-03-03 68 views
1

即时通讯开始MVC &想你关于仓库&查看模型的建议,特别是几台库数据组合成一个VM。合并视图模型

如果我有需要自己的存储库(对不起,本作的基本性质)三个不同的部分(列)网页:

UserInfoData - 显示在左山坳

DiaryData - 所示山坳中间

CommentData - 在右侧山坳所示

Im做以下几点: -

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 ?? 
} 

我将如何结合这三个虚拟机的到的东西我能回到观点 - 我用另一个虚拟机,它接受这三个虚拟机的?

是否有与具有自己的数据网页的小部分打交道时,最好的做法?

回答

3

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

你可以创建一个包含三个子视图模型视图模型,但你需要问自己,我该怎么使用任何三个子视图模型其他地方的?如果不是,那么你可以使用一个大视图模型。否则,封装较小视图模型的'包装器'视图模型没有任何问题。

你可以保留你在上面定义的三个视图模型,你可以使用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请求加载/渲染。再说一次,只有这对您有意义,但使用部分视图/渲染操作方法通常会为您在网站和AJAX局部页面渲染上重复使用提供更大的灵活性。

+0

感谢汤米,也有很大帮助,Html.RenderAction看起来很有希望与jQuery的看起来也不错,我去有一个思考在设计网站,并与这两种技术很好的发挥。 – LenPopLilly 2012-03-03 17:45:30