你如何在asp.net mvc中使用显示"孤岛"数据的用户控件?

dtc*_*dtc 9 asp.net asp.net-mvc user-controls viewdata controller

我试图找出如何在asp.net mvc中使用usercontrols.我知道如何将一个usercontrol添加到视图以及如何将数据传递给它.我无法弄清楚的是,如何在不必检索和传递每个控制器中的数据的情况下执行此操作?

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

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

我来自Web表单,在那里我可以编写一个用户控件,它可以独立于其使用的任何页面,从而获得自己的数据和显示数据.

raj*_*lai 11

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

基本方法是

  • 在BaseController中填充视图的数据(OnActionExecuting事件)
  • 编写自定义动作过滤器
  • 编写应用程序控制器(例如,在以下链接中).

OnActionExecuting的一个例子是

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

    }
Run Code Online (Sandbox Code Playgroud)

您可以在任何视图上使用"标签"视图数据.这只是将usercontrol呈现为副内容的示例.

<div id="sidebar_b">
         <asp:ContentPlaceHolder ID="ContentReferenceB" runat="server" >
             <% Html.RenderPartial("Tags"); %>
         </asp:ContentPlaceHolder>
   </div>
Run Code Online (Sandbox Code Playgroud)

我发现以下网址很有用.

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/