将动态对象传递给View

时间:2016-02-24 14:56:26

标签: c# asp.net asp.net-mvc

我决定尝试避免使用视图模型并将动态数据传递给视图,这是我在控制器中编写的测试代码:

        dynamic model = new ExpandoObject();

        var user = unitOfWork.UserRepository.Get().First();

        model.Title = "Dynamic test";
        model.User = user;

        return View(model);

在视图中:

@Model.Title
@Model.User.UserName

我更喜欢这种方法,因为我不必为每个控制器动作编写ViewModel类,并且每次我决定将新属性传递给View时也不必更改ViewModel。

我看到的唯一缺点是视图中缺少intellisense,因为它们不再强类型,但这似乎不是一个大问题。

我的问题是,使用这种方法而不是ViewModels是否有任何其他缺点,因为我只是在我的公司开始一个新项目,如果我使用这种方法,我不想后悔... < / p>

1 个答案:

答案 0 :(得分:1)

我认为创建视图模型的主要优点是代码的可读性和可重用性。

如果我去你粘贴的控制器,技术上我可以理解它,但我从商业角度不知道模型是什么。当然,您可以将其命名为更具描述性,但我不相信它可以解决问题。

第二件事是可重复使用性,所以当多个视图可以使用相同的模型或模型的某些部分时,我可以想象很多情况,在这种情况下,您需要复制&amp;粘贴代码,创建动态模型或创建一些辅助函数,为您执行此操作。

基本上我认为当需要更改这些动态模型时会非常痛苦,例如你在控制器中删除了一些属性,但是你忘了在某些视图中做同样的事情。你不会被compilator告知有什么不对劲。

此外,如果没有强类型视图模型,我相信没有办法创建基于属性的模型验证(这是非常常见的商业案例)