我在我的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";发布于 2011-11-30 23:32:26
像这样的问题通常会从两边得到答案。许多人觉得像这样使用ViewBag是一个糟糕的设计(包括我自己)。这会降低你的控制器的可测试性。视图不是强类型的,等等。
使用ViewModel通常是一个很好的实践。与其让您的模型成为域模型,不如创建一个特定于您正在显示的视图的模型。这样,它就可以100%定制,以满足您对此特定视图的需求。你会发现一旦你这样做了,你就不再需要使用ViewBag了。它有时会创建许多额外的代码(每个视图一个视图模型),但代码非常简单,更改一个视图不会破坏任何其他视图。
发布于 2011-11-30 23:16:06
为什么不用Person作为你的模型呢?这样,您就可以使用强类型视图。我个人的观点是,ViewBag几乎是“魔法字符串”,虽然它在你是唯一的开发人员的小范围内工作得很好,但在更大的应用程序和项目中,你几乎迫使每个人记住所有的魔法字符串是什么。此外,您不会获得使用模型和强类型视图时的类型安全。
https://stackoverflow.com/questions/8328083
复制相似问题