我有一个用户控件,显示最新公告列表。这个用户控件几乎可以在90%的页面中使用。现在我关心的是如何将数据传递给该用户控件以获取最新公告。
我的第一种方法是创建一个基本控制器,在Initialise方法中,我通过ViewBag / ViewData将数据传递给用户控件。我的所有其他控制器都来自这个基本控制器。这看起来不错,但我担心的是,对于现有的一些简单解决方案来说,这可能会成为一种过度杀伤力。此外,我还需要确保没有控制器能够摆弄我的用户控件的Viewdata / Viewbag数据。
如果这是正确的前进方式或存在更好的解决方案,请告诉我。
由于
答案 0 :(得分:0)
答案 1 :(得分:0)
假设您有一个“用户控件”(您应该尝试将它们称为MVC中的部分视图),如下所示:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Announcement>>" %>
这意味着您的部分视图需要公告对象列表。
现在,问题是 - 你在哪里渲染这个局部视图?
您可以从母版页进行,也可以从视图中进行,也可以从其他部分视图进行。
无论哪种方式,渲染部分的代码都需要如下所示:
<% Html.RenderPartial("LatestAnnouncements", announcements) %>
但是 - 你从哪里得到公告。
假设您有一个Repository / DAL / helper方法来获取最新公告 - 我认为您应该拥有ViewModel,您需要从基础ViewModel继承:
public class AnnouncementViewModelBase
{
protected IEnumerable<Announcement> GetAnnouncements()
{
// call DAL
}
}
然后,任何需要呈现最新公告部分的master / view / partial应绑定到从该基本视图模型继承的ViewModel。
在master / view / partial不是强类型的情况下(例如动态视图),您可以将其粘贴在ViewData中。但是,如果您正确地组织了视图,则不需要这样做。
答案 2 :(得分:0)
您应该在这种情况下使用RenderAction,这样您就无需在控制器的每个操作方法中传递所需的数据。