我正在尝试了解如何在asp.net mvc中使用用户控件。我知道如何将用户控件添加到视图中,以及如何向其传递数据。我一直不明白的是,如果不在每个控制器中检索和传递数据,如何做到这一点?
例如,如果我有一个用户控件,它在站点中的几个页面上但不是所有页面上显示最近的帖子,那么我如何编写控制器,以便获取该用户控件的数据并将其仅从网站中的一个位置传递给该用户控件,而不是在使用该用户控件的每个不同的控制器中获取和传递数据?
我不确定这是否有意义。有没有更好的或推荐的方法来处理您想要在多个页面上显示的“孤岛”数据?
我来自web表单,在那里我可以编写一个用户控件,它可以获得自己的数据,并独立于使用它的页面的其余部分显示数据。
发布于 2008-11-29 02:56:21
有多种方法可以做到这一点。
基本方法是
下面是OnActionExecuting的一个示例
[HandleError]
public class BaseController : Controller
{
CourseService cs = new CourseService();
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
List<Tag> tags = cs.GetTags();
ViewData["Tags"] = tags;
}
}您可以在任何视图上使用“标记”视图数据。这只是一个将用户控件呈现为辅助内容的示例。
<div id="sidebar_b">
<asp:ContentPlaceHolder ID="ContentReferenceB" runat="server" >
<% Html.RenderPartial("Tags"); %>
</asp:ContentPlaceHolder>
</div>我发现下面的URL很有用。
http://weblogs.asp.net/stephenwalther/archive/2008/08/12/asp-net-mvc-tip-31-passing-data-to-master-pages-and-user-controls.aspx
http://blog.matthidinger.com/2008/02/21/ASPNETMVCUserControlsStartToFinish.aspx
http://www.aaronlerch.com/blog/2008/01/26/displaying-foo-on-every-page-of-an-aspnet-mvc-application/
http://blog.wekeroad.com/2008/01/07/aspnet-mvc-using-usercontrols-usefully/
发布于 2008-11-29 18:20:52
在codeplex上提供的MVC Futures中,包含了RenderAction HtmlHelper扩展。这将允许您为ueser控件创建控制器,并且此控制器将填充用户控件使用的ViewData,而不必像建议的那样求助于基本控制器。
在视图中,您将执行以下操作
<% Html.RenderAction("Index", "UserControlController") %>或者其他重载之一。
这将创建控制器的一个实例,执行该方法,并将用户控件视图呈现到主视图中。主视图控制器不需要知道有关用户控件或其模型/数据的任何信息。
发布于 2008-11-29 02:20:03
将为该用户控件获取视图数据的代码重构为它自己的方法,甚至可能是它自己的模型(类)。从需要填充控件的每个控制器调用此方法,并使用熟知的密钥在ViewData中传递结果。您甚至可能希望将当前控制器的类型传递给您的方法,以防它需要知道根据控制器的基本模型要检索哪些数据。
ViewData["RecentPosts"] = RecentPosts.GetRecentPosts( this.GetType() );在控件中,使用熟知密钥检索数据。
https://stackoverflow.com/questions/326987
复制相似问题