ASP.NET MVC - MasterPageView и RenderPartials - Путаница - PullRequest
5 голосов
/ 11 марта 2009

Я немного запутался, пытаясь вывести список категорий на панель навигации на MasterPageView в последней версии ASP.NET MVC framework. У меня пока 0 опыта работы с Partials (это добавляет путаницы).

Должен ли я использовать этот вариант RenderPartial?

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 ]

7 голосов
/ 12 марта 2009

Вы не хотите, чтобы на вашей главной странице были данные просмотра? Вы можете решить эту проблему, имея базовый класс данных представления, который ВСЕ другие ваши классы представления наследуют от ...

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; }
}

Теперь на вашей странице 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) %>

Это может значительно повлиять на архитектуру вашего приложения, но это не обязательно плохо.

HTHS, Charles

1 голос
/ 11 марта 2009
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 на своих контроллерах

1 голос
/ 11 марта 2009

Я бы сказал, что, поскольку это главная страница, вам, вероятно, придется хранить данные, которые вы передаете, во ViewData со строковым ключом. Если бы это была обычная страница просмотра, было бы лучше иметь строго типизированную страницу, но это другой случай. Так что вы, вероятно, сделали бы что-то такое в вашем контроллере:

ViewData["MasterPageData"] = FunctionToGetData();

А затем на главной странице что-то вроде этого:

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

Затем в элементе управления обработайте, как на обычной странице просмотра:

<% var categories = (CastIfNeeded)ViewData["MasterPageData"]; %>

process as normal...

Мне еще не приходилось передавать данные на главную страницу, но я бы подумал, что вы это сделаете. Подробнее здесь.

РЕДАКТИРОВАТЬ: немного изменил его, чтобы отразить то, что я делаю в моем текущем проекте.

0 голосов
/ 11 марта 2009

Я бы вместо этого использовал Html.RenderAction () и вернул из него частичное представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...