Что такое ASP.NET MVC 2 для представления одной и той же модели двумя разными способами - PullRequest
6 голосов
/ 12 августа 2010

Например, у меня есть модель X со свойствами Title (строка) и Valid (bool).Мне нужно показать одну и ту же модель на двух отдельных страницах с разными метками полей и элементами управления вводом.Например, «Заголовок» для заголовка и «Действительный» для действительного в одной форме, а «Назначение» для заголовка и «Возвращение» для действительного в другой.

Я думаю, что самым простым способом было бы иметь два разных представленията же модель.Но действительно ли это путь MVC?

Спасибо

Ответы [ 3 ]

3 голосов
/ 12 августа 2010

Хорошо, допустим, у вас есть какая-то папка View с именем List, а другая с именем Details - и отображение модели в двух должно быть разным.

Вы можете создать папку DisplayTemplates в каждой из двух папок.и создайте PartialControl с с тем же именем , что и у вашей модели, а также строго введите его в вашу модель.

В ваших различных представлениях вы можете затем сделать <%= Html.DisplayFor( your model) %> или вы также можете использоватьобычный <% Html.RenderParital("NameOfPartial", ModelX); %>

Редактировать Чтобы попытаться подойти к исходному вопросу, может быть, это может вам как-то помочь (я опубликовал это как ответ на другой вопрос Какизменить [DisplayName «xxx»] в контроллере? )

public class MyDisplayName : DisplayNameAttribute
{
    public int DbId { get; set; }

    public MyDisplayName(int DbId)
    {
        this.DbId = DbId;
    }


    public override string DisplayName
    {
        get
        {
            // Do some db-lookup to retrieve the name
            return "Some string from DBLookup";
        }
    }
}

    public class TestModel
    {
        [MyDisplayName(2)]
        public string MyTextField { get; set; }
    }

Может быть, вы могли бы переписать пользовательский атрибут, чтобы сделать какой-то логический выбор имени, и таким образом использовать тот же PartialViewдля обеих моделей-вариаций?

2 голосов
/ 12 августа 2010

Да, уместны два разных вида, так как вы предоставляете два разных вида вашей модели.

Однако, вы уверены, что не вводите свои данные в единую модель, когда на самом деле они представляют разные сущности в каждом случае?

1 голос
/ 12 августа 2010

Это действительно та же модель?

Если это две разные сущности со схожими свойствами, я бы создал две отдельные модели представлений.Любая общность может быть помещена в абстрактный базовый класс или интерфейс.

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

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

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