Можно ли дать пользовательскому элементу управления ASP.NET MVC другую модель, чем страница? - PullRequest
1 голос
/ 01 января 2009

У меня есть страница заказа, которая визуализируется из объекта Model (Заказ) с несколькими свойствами. Одним из свойств объекта Order является

public List<OrderItem> Items { get; set; };

, а другой

public List<OrderComment> Comments { get; set; };

Моя главная страница объявлена ​​так:

public class OrderView : ViewPage<Order>

Я хочу иметь пользовательский элемент управления для каждого OrderItem (с именем OrderItemControl) и другой пользовательский элемент управления для каждого OrderComment (с именем OrderCommentControl). Если бы я мог использовать репитер для каждой коллекции, это было бы здорово, но я столкнулся с проблемой. Я хочу, чтобы мои объявления управления пользователем выглядели так:

public class OrderItemControl : ViewUserControl<OrderItem>
public class OrderCommentControl : ViewUserControl<OrderComment>

Я получаю сообщение об ошибке, когда пытаюсь сделать следующее:

{"Элемент модели, переданный в словарь, относится к типу 'Order', но для этого словаря требуется элемент модели типа 'OrderItem'."}

Я предполагаю, что повторитель может быть неправильным путем, но я действительно хочу, чтобы каждый пользовательский элемент управления имел модель типа OrderItem или OrderComment, а не только Order.

Ответы [ 2 ]

3 голосов
/ 01 января 2009

Да. Используя RenderPartial, вы можете использовать подпись, которая предоставляет модель, и просто использовать любой объект модели, доступный вам в текущем представлении.

<% foreach (OrderItem orderItem in ViewData.Model.OrderItems)
   {
 %>
       <%= Html.RenderPartial( "OrderItem", orderItem, ViewData ) %>
<% } %>

Вы можете покопаться в фактическом источнике в http://www.codeplex.com/aspnet. Нажмите на вкладку Source и перейдите вниз к дереву исходного кода MVC.

0 голосов
/ 01 января 2009

Убедитесь, что ваш вызов для визуализации пользовательского элемента управления передает правильные данные функции Render.

(Мои воспоминания о текущей объектной модели для ViewData нечеткие, но это должно быть близко).

См этот старый пост от Роба Конери

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