Переместить частичное свойство страницы в View без кода позади - PullRequest
0 голосов
/ 20 апреля 2009

Я выполняю рефакторинг веб-приложения, созданного с использованием предыдущих версий Asp.Net MVC, в котором все представления имеют по 2 файла с задним кодом каждый.

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

Мало кто из них имеет такие свойства в коде:

public partial class List {
    public Message NewMessage { get { return new Message(); } }
}

Прежде чем полностью удалить их (я знаю, что эти методы не относятся к представлениям), как мне скопировать их на одной странице aspx или ascx?
Я только что попытался скопировать и вставить публичные методы в теги <%%>, но это не работает.

Ответы [ 2 ]

3 голосов
/ 20 апреля 2009

Могу ли я спросить, почему вы использовали этот подход в первую очередь? Я думаю, что вы могли бы добиться того же, сделав свой View строго типизированный, и передать сообщение как View 'Model.

Inherits="System.Web.Mvc.View<Message>"

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

public class ModelWithMessage  {
    public Message Message { get; set; }
    public Object Model { get; set; }
    public ModelWithMessage(Message Message, Object Model) {
        this.Message = Message;
        this.Model = Model;
    }
}

Конечно, вы также можете сделать этот тип универсальным, допуская конструкцию ModelWithMessage<T> и избегая необходимости приводить Model к нужному типу.

Другой способ сделать это - использовать TempData. В вашем контроллере установите

TempData["Message"] = "Hello world!";

Затем в вашем View вы пишете сообщение просто с помощью

<%= TempData["Message"] %>

Какой подход вы выберете, зависит от того, что содержится в вашем классе Message.

0 голосов
/ 20 апреля 2009

Вы почти ответили на это сами, сказав: «Я знаю, что эти методы не относятся к представлениям»:)

Сначала я переместил бы эти методы в классы контроллеров и передал бы все необходимые данные в Модели (при условии, что это подходящее для них место), затем, когда вы удалили всю функциональность из ваших файлов кода и получили Очистите разделение еще раз, вы можете удалить файлы кода из ваших представлений.

...