首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在asp.net mvc中使用用户控件来显示数据的“孤岛”?

如何在asp.net mvc中使用用户控件来显示数据的“孤岛”?
EN

Stack Overflow用户
提问于 2008-11-29 01:10:40
回答 4查看 1.8K关注 0票数 9

我正在尝试了解如何在asp.net mvc中使用用户控件。我知道如何将用户控件添加到视图中,以及如何向其传递数据。我一直不明白的是,如果不在每个控制器中检索和传递数据,如何做到这一点?

例如,如果我有一个用户控件,它在站点中的几个页面上但不是所有页面上显示最近的帖子,那么我如何编写控制器,以便获取该用户控件的数据并将其仅从网站中的一个位置传递给该用户控件,而不是在使用该用户控件的每个不同的控制器中获取和传递数据?

我不确定这是否有意义。有没有更好的或推荐的方法来处理您想要在多个页面上显示的“孤岛”数据?

我来自web表单,在那里我可以编写一个用户控件,它可以获得自己的数据,并独立于使用它的页面的其余部分显示数据。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-11-29 02:56:21

有多种方法可以做到这一点。

基本方法是

  • 在BaseController (OnActionExecuting事件)中填充视图的数据
  • 编写自定义操作筛选器
  • 编写应用程序控制器(例如,位于以下链接中)。

下面是OnActionExecuting的一个示例

代码语言:javascript
复制
   [HandleError]
    public class BaseController : Controller
    {
        CourseService cs = new CourseService();
        protected override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            List<Tag> tags = cs.GetTags();
            ViewData["Tags"] = tags;
        }

    }

您可以在任何视图上使用“标记”视图数据。这只是一个将用户控件呈现为辅助内容的示例。

代码语言:javascript
复制
<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/

票数 11
EN

Stack Overflow用户

发布于 2008-11-29 18:20:52

codeplex上提供的MVC Futures中,包含了RenderAction HtmlHelper扩展。这将允许您为ueser控件创建控制器,并且此控制器将填充用户控件使用的ViewData,而不必像建议的那样求助于基本控制器。

在视图中,您将执行以下操作

代码语言:javascript
复制
<% Html.RenderAction("Index", "UserControlController") %>

或者其他重载之一。

这将创建控制器的一个实例,执行该方法,并将用户控件视图呈现到主视图中。主视图控制器不需要知道有关用户控件或其模型/数据的任何信息。

票数 3
EN

Stack Overflow用户

发布于 2008-11-29 02:20:03

将为该用户控件获取视图数据的代码重构为它自己的方法,甚至可能是它自己的模型(类)。从需要填充控件的每个控制器调用此方法,并使用熟知的密钥在ViewData中传递结果。您甚至可能希望将当前控制器的类型传递给您的方法,以防它需要知道根据控制器的基本模型要检索哪些数据。

代码语言:javascript
复制
 ViewData["RecentPosts"] = RecentPosts.GetRecentPosts( this.GetType() );

在控件中,使用熟知密钥检索数据。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/326987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档