Страница должна унаследовать 2 модели представления и показать ту модель, которая требуется - PullRequest
0 голосов
/ 16 сентября 2010

У меня есть страница с контентом, которую я очень рад показать, наследуя contentModel. Мне нужно изменить страницу, чтобы она также могла показывать другую viewModel (например, revertedContent), но показывать ее только в том случае, если нужно, чтобы другой показывал обычный contentModel.

Я уверен, что есть простой способ сделать это, это просто боль, так как мне нужно, чтобы страница не менялась в URL, например. details.aspx остается как есть, но может отображать текущий контент или предыдущий версионный контент.

ура заранее

Ответы [ 4 ]

6 голосов
/ 16 сентября 2010

Представления должны быть "глупыми" (и нести единоличную ответственность)

Не думаю, что вы полностью понимаете концептуальную модель Asp.net MVC. Предполагается, что представления глупы и содержат столько логики, сколько необходимо. Разделяй и властвуй - это правило здесь. Поэтому, если у вас есть два разных представления определенных данных, вы также создадите два настраиваемых представления.

Контролер должен быть умным парнем здесь. Таким образом, предоставление взглядам возможности принятия решений не является правильным способом сделать это.

Решение почти наверняка зависит от состояния модели приложения, поэтому контроллер сам должен решить, какой вид отобразить, и предоставить правильную модель для этого конкретного представления.

Нет ничего необычного в том, чтобы возвращать различные виды из одного и того же действия контроллера. В камне не написано, что каждое действие контроллера должно иметь одно представление. Таким образом, мы получили бы раздутые представления со слишком большим количеством кода, что сделало бы их невозможными. По сути, мы бы взорвали все разделение проблем модели MVC.

Поэтому, когда вы хотите вернуть определенный вид с вашего контроллера, вы всегда можете указать его имя при возврате из действия контроллера:

return View("ViewName", model);

Я предлагаю вам проанализировать и реорганизовать ваш процесс.

3 голосов
/ 16 сентября 2010

Можно ли вместо этого создать «родительскую» модель представления, которая содержит объекты contentModel и revertedContent?Отправьте эту новую модель представления в представление и проверьте, является ли член revertedContent пустым.

public class ParentViewModel
{
    public contentModel content { get; set; }
    public revertedContent reverted { get; set; }
}

Затем представление

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<YourNamespace.ParentViewModel>" %>
...
<% if(!Model.reverted) { %>
    //do regular content here
<% } else { %>
    //do reverted content here
<% } %>
1 голос
/ 16 сентября 2010

Дэвид отвечает в одном направлении.Я бы посмотрел на то, чтобы сделать что-то немного выше в пищевой цепочке - например, заставить контроллер выбирать вид, а также предоставить модель представления.

0 голосов
/ 17 сентября 2010

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

Только вы будете знатькакой дизайн будет иметь смысл для вашего приложения.

Я сделаю слепое предположение и предположу, что вы всегда можете использовать ContentViewModel в своем представлении. Содержит свойство IsRevertedInfo, которое вы можете проверить в представлении для отображения любой дополнительной информации .

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