2010-04-30 3 views
0

У меня проблема с частичным представлением. Я разрабатываю блог в asp.net mvc, и я бы сделал на моей главной странице список категорий, последний пост, последние комментарии. Я думаю, что лучшим решением является использование строго типизированного частичного представления, и в каждом частичном представлении передать необходимую модель.Проблема с строго типизированным частичным видом

Моя проблема заключается в том, что модель в View .. в любом виде (подключенного к ContentPlaceHolder в Masterpage в) входить в противоречие с моделями частичным видом, и я получаю сообщение об ошибке, как это:

The model item passed into the dictionary is of type 'System.Collections.Generic.List`1[Blog.Models.Articoli]' but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable`1[Blog.Models.Categorie]'. 

я нашел на веб-грязное решение, состоящее в том, чтобы передать togheter модель любого вида, некоторые viewdata, по одному для каждой модели, чтобы пройти в частичном представлении. Но это решение не уважает DRY Принцип ... потому что вы должны повторить этот код для каждого действия!

Итак, мой вопрос: могу ли я создать модель, содержащую также модель частичного просмотра? Если, да, таким образом?

Есть ли другое решение более простое?

Спасибо за помощь

+0

Я столкнулся с этим раньше. Опубликуйте заголовок вашего представления и кода RenderPartialView, пожалуйста – hunter

ответ

5

Как насчет модели модели?

Я создал классы-оболочки, которые передаются мои взгляды, а не то, что объект, который я обычно используют

public class MyCreateUserView 
{ 
    public User CreatingUser { get; set; } 
    public MyPartialViewObject Blah { get; set; } 
} 

На ваш взгляд пишут:

public ActionResult CreateUser() 
{ 
    MyCreateUserView createUser = new MyCreateUserView() 
    { 
     CreatingUser = GetUserFromSomewhere(), 
     Blah = GetPartialViewObject(); 
    } 

    return View(createUser); 
} 

Тогда ваш заголовок страницы выглядит так :

<%@ Page Language="C#" Inherits="ViewPage<MyCreateUserView>" %> 

и когда вы предоставляете свою частичную запись:

<% Html.RenderPartial("../MyPartialViewObject ", Model.Blah); %> 
1

Вместо того, чтобы решать это с помощью шаблона, который вы описываете (который обычно является отличным шаблоном), я решаю это с помощью вызовов RenderAction и возвращаю частичный вид. Таким образом, код находится в одном месте, так как каждый вызов для каждого представления не должен беспокоиться о сортировке всех необходимых данных. Если вы хотите посмотреть короткую дискуссию о том, как ее использовать, я бы посмотрел блог Haack: http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx. Вы также можете посмотреть обсуждение этого другого сообщения здесь на SO: ASP.NET MVC Master Page Data

Смежные вопросы