Есть ли способ использовать что-то вроде ‹asp: Content› в частичных представлениях, которые отображаются с помощью RenderAction?

В моем веб-приложении ASP.NET MVC 2 я использую _ 1_ для отображения HTML в области веб-сайта, которую я называю" флэш-сообщением ". Под флеш-областью я подразумеваю выделенную область вверху, которая содержит сообщение о предыдущем запросе, например Hello <%: Html.DisplayTextFor(m => m.Username) %>, когда пользователь входит в систему.

Одно мгновенное сообщение, над которым я работаю, немного сложнее. В ответ необходимо добавить блок кода Javascript, но я хочу разместить элемент script перед конечным тегом </body>, как рекомендовано в книге Высокопроизводительный JavaScript.

В обычном представлении я использую <asp:Content ContentPlaceHolderID="FlashScriptElements" runat="server"><script> ... </script></asp:Content> для размещения script элементов внизу страницы. К сожалению, если я попытаюсь сделать то же самое в частичном представлении, отображаемом с помощью RenderAction, я получаю ошибку парсера: «Элементы управления содержимым должны быть элементами управления верхнего уровня на странице содержимого или вложенной главной странице, которая ссылается на главную страницу».

Есть ли что-то вроде <asp:Content>, которое я могу использовать в частичных представлениях, которые вставляют содержимое в соответствующее место главной страницы?


person Daniel Trebbien    schedule 20.01.2011    source источник


Ответы (1)


<asp:Content> не поддерживается с RenderAction, потому что RenderAction эквивалентен наличию кода, который будет выполнять ваш дочерний метод действия, собирать ответ и затем вставлять его в представление родительского метода.

Что вы можете сделать, так это добавить нужные вам скрипты где-нибудь в коллекцию HttpContextBase.Items. Затем на главной странице прямо перед концом документа найдите зарегистрированные сценарии и распечатайте их.

person marcind    schedule 20.01.2011
comment
Я не вижу Items в документации MSDN для HttpRequest (http://msdn.microsoft.com/en-us/library/system.web.httprequest.aspx). Это не так HttpRequest? - person Daniel Trebbien; 20.01.2011
comment
Извините, имел в виду HttpContextBase.Items. Вы должны получить это через объект вашего контроллера и / или представления, а не напрямую через статическое свойство HttpContext.Current. - person marcind; 20.01.2011
comment
Почему HttpContext.Current плохо работает с действием или представлением контроллера? - person Daniel Trebbien; 20.01.2011