代码之家  ›  专栏  ›  技术社区  ›  BuddyJoe

ASP.NET MVC-MasterPageView和RenderPartials-混淆

  •  5
  • BuddyJoe  · 技术社区  · 15 年前

    在最新版本的ASP.NET MVC框架中,我有点困惑于如何将类别列表放入MasterPageView的导航栏中。 到目前为止,我对部分词还没有经验(这增加了困惑)。

    我应该使用这个版本的渲染器吗?

    HtmlHelper.RenderPartial(string partialViewName, object model)
    

    我找不到这种方法的好例子。按照惯例,没有与MasterPageView相关联的模型,对吧?那么,从MasterPageView将数据推或拉到“部分”中的正确方法是什么?

    假设这种方法绝对走错了路:

        <div id="navigation">
            <% 
                CategoryRepository cr = new CategoryRepository();
                IList<Category> lst = cr.GetCategories();
                Html.RenderPartial("NavBar", lst);
            %>
        </div>
    
    4 回复  |  直到 15 年前
        1
  •  7
  •   Charlino    15 年前

    是否不希望母版页具有viewdata?您可以通过拥有一个基本视图数据类来解决这个问题,而所有其他视图数据类都继承自。。。

    BaseViewData.cs-这是所有其他viewdata类将从中继承的viewdata类

    public class BaseViewData
    {
        public string Title { get; set; }
        public string MetaKeywords { get; set; }
        public string MetaDescription { get; set; }
        IList<Category> NavCategoryList { get; set; }
    }
    

    现在在你的网站上。母版页只是

    <%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<BaseViewData>" %>
    
    <title><%=ViewData.Model.Title %></title>
    <meta name="keywords" content="<%=ViewData.Model.MetaKeywords %>" />
    <meta name="description" content="<%=ViewData.Model.MetaDescription %>" />
    
    <%= Html.RenderPartial("NavBar", ViewData.Model.NavCategoryList) %>
    

    这可能会对您的应用程序体系结构产生重大影响,但并不一定是坏事。

    HTHs公司, 查尔斯

        2
  •  1
  •   Ayo    15 年前
    public ActionResult NavBar()
    {
    
                CategoryRepository cr = new CategoryRepository();
                IList<Category> lst = cr.GetCategories();
    
    
                return View(lst);
    }
    

    在你的部分通话中

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
    <%@ Import Namespace="app.Models" %>
    

    在这里完成你所有的渲染界面

    <div id="navigation">
            <% 
               Html.RenderPartial("NavBar");
            %>
        </div>
    

    您可以在控制器中执行ActionResult调用

        3
  •  1
  •   Blair Scott    15 年前

    我想说的是,因为它是母版页,所以您可能需要存储用字符串键传入ViewData的数据。如果是常规视图页,最好是使用强类型页,但这是另一种情况。因此,您可能会在控制器中执行以下操作:

    ViewData["MasterPageData"] = FunctionToGetData();
    

    然后在母版页上这样写:

    <% 
       if (ViewData["MasterPageData"] != null) 
       {
          Html.RenderPartial("ControlName.ascx", ViewData);
       } 
    %>
    

    然后在控件中,像在普通视图页上一样处理:

    <% var categories = (CastIfNeeded)ViewData["MasterPageData"]; %>
    
    process as normal...
    

    我还没有把数据传给母版页,但我想你会这么做的。更多信息 here.

    编辑:稍微修改一下,以反映我在当前项目中所做的工作。

        4
  •  0
  •   John Sheehan    15 年前

    我将改用Html.RenderAction()并从中返回部分视图。