ASP.NET MVC Эквивалент «переопределения рендеринга пустот» из ASP.NET WebForms - PullRequest
3 голосов
/ 10 февраля 2009

Что такое ASP.NET MVC, эквивалентный «переопределению void Render» из ASP.NET WebForms? Где у вас есть возможность выполнить некоторую обработку в последнюю минуту перед отправкой вывода клиенту?

Например, я бы не использовал это в рабочем коде, но проиллюстрировал очистку разметки <title> и <head> для всего сайта при размещении в MasterPage приложения WebForms.

    protected override void Render(HtmlTextWriter writer)
    {
        System.IO.StringWriter sw = new System.IO.StringWriter();
        HtmlTextWriter htw = new HtmlTextWriter(sw);
        base.Render(htw);
        htw.Close();
        string h = sw.ToString();
        string fhtml = h.Replace("<title>\r\n\t", "\n<title>")
                             .Replace("\r\n</title>", "</title>")
                             .Replace("</head>","\n</head>");
        // write the new html to the page
        writer.Write(fhtml);
    }

Каков наилучший подход для воспроизведения окончательного рендеринга текста в ASP.NET MVC?

UPDATE:
Итак, глядя на ссылку (диаграмму), которую упоминал Эндрю Хэйр, похоже, вы могли бы сделать это в View Engine. Можете ли вы сделать что-то новое или изменить способ работы движка View по умолчанию, или вам нужно заменить все это?

Ответы [ 2 ]

4 голосов
/ 10 февраля 2009

Это не тот способ, которым работает MVC.

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

Единственным небольшим исключением является то, что модель все еще может выполнять небольшую обработку, пока она просматривается представлением.

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

0 голосов
/ 10 февраля 2009

Насколько я вижу, единственное, что вы хотите сделать в вашем Render() -методе, - это переупорядочить некоторые теги в разделе <head>. Это уже сделано правильно для вас в MVC, если только вы не используете какой-то самодельный способ создания <head> -секции в Masterpage.

Я бы порекомендовал выровнять теги точно так, как вы хотите, чтобы они находились непосредственно в html разметке вашего Master, и убедитесь, что ViewData["title"] или все, что вы используете для заполнения тегов контентом, не запускается или конец с переносом строки.

...