将数据传递给用户控件ASP.NET MVC

时间:2010-12-20 11:17:32

标签: asp.net-mvc user-controls partial-views

我有一个用户控件,显示最新公告列表。这个用户控件几乎可以在90%的页面中使用。现在我关心的是如何将数据传递给该用户控件以获取最新公告。

我的第一种方法是创建一个基本控制器,在Initialise方法中,我通过ViewBag / ViewData将数据传递给用户控件。我的所有其他控制器都来自这个基本控制器。这看起来不错,但我担心的是,对于现有的一些简单解决方案来说,这可能会成为一种过度杀伤力。此外,我还需要确保没有控制器能够摆弄我的用户控件的Viewdata / Viewbag数据。

如果这是正确的前进方式或存在更好的解决方案,请告诉我。

由于

3 个答案:

答案 0 :(得分:0)

这是你追求的那种东西吗? How to pass data from view to UserControl in ASP.NET MVC?

答案 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,这样您就无需在控制器的每个操作方法中传递所需的数据。