我在MVC应用程序中大量使用了ViewBag,这被认为是不良的做法吗?我不确定是花时间创建ViewModels(但是我认为它更适合MVVM而不是MVC)还是继续大量使用ViewBag。有什么争议和反对这一论点?示例控制器方法将返回其模型(通常是一个简单的域实体)以及以下调用ViewBag:

            ViewBag.TotalItems = data.Count();
        ViewBag.FilteredItems = gridFilters;
        ViewBag.Action = "Events";
        ViewBag.Area = "People";
        ViewBag.EntityID = person.EntityID;
        ViewBag.OrganisationID = ID;
        ViewBag.Name = string.Format("{0} {1}", person.FirstName, person.LastName);
        ViewBag.IsEnabled = person.IsEnabled;
        ViewBag.EntityID = person.EntityID;
        ViewBag.Favourited = users.IsOnUserFavourites(person.EntityID);

        ViewBag.Columns = userColumns;

        ViewBag.Title = "Person : " + string.Format("{0} {1}", person.FirstName, person.LastName) + " - Events";
有帮助吗?

解决方案

这样的问题通常会从围栏的两侧得到答案。许多人认为使用这样的ViewBag是一个不好的设计(包括我自己)。它使您的控制器不可测试。您的观点不是强烈键入的,等等。

通常是一个好习惯 ViewModel. 。而不是让您的模型是域模型,而是创建一个特定于您显示的视图的模型。这样一来,它可以100%定制根据您所需的特定视图来量身定制。您会发现,一旦执行此操作,您实际上并不需要太多使用ViewBag。有时可以创建很多额外的代码(每个视图一个视图模型),但是代码非常简单,对一个视图进行更改不会破坏其他任何内容。

其他提示

为什么不将人作为您的模型?这样,您可以使用强烈键入的视图。我个人的看法是,ViewBag几乎是“魔术弦”,尽管它在您是唯一的开发处的小规模上很好地运作良好,但在较大的应用程序和项目中,您几乎迫使每个人都记住所有魔术弦。另外,您不会获得使用模型和强烈键入视图的类型安全性。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top