ASP.NET MVC - MasterPageView和RenderPartials - 混乱

Bud*_*Joe 5 asp.net-mvc

我试图将一个类别列表放在ASP.NET MVC框架的最新版本中的MasterPageView上的导航栏中,我有点困惑.到目前为止,我对Partials有0次经验(这增加了混乱).

我应该使用RenderPartial的这个变体吗?

HtmlHelper.RenderPartial(string partialViewName, object model)
Run Code Online (Sandbox Code Playgroud)

我无法找到这种方法的任何好例子.按照惯例,没有与MasterPageView关联的模型吗?那么从MasterPageView推送或拉取数据到"部分"的正确方法是什么?

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

    <div id="navigation">
        <% 
            CategoryRepository cr = new CategoryRepository();
            IList<Category> lst = cr.GetCategories();
            Html.RenderPartial("NavBar", lst);
        %>
    </div>
Run Code Online (Sandbox Code Playgroud)

Cha*_*ino 7

你不希望你的主页有viewdata吗?您可以通过拥有所有其他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; }
}
Run Code Online (Sandbox Code Playgroud)

现在在您的Site.Master页面中

<%@ 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) %>
Run Code Online (Sandbox Code Playgroud)

这可能会对您的应用程序架构产生重大影响,但这不一定是件坏事.

HTHs,查尔斯


Joh*_*han 0

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