Проблема рендеринга HTML-разметки в ViewData? Кроме того, MultiView функциональность в MVC?

Я пытаюсь заполнить экземпляр ViewData HTML-разметкой, как показано ниже. Когда страница отображается, HTML-теги отображаются как текст, а не как HTML-разметка. Кто-нибудь знает почему?

Код контроллера:

if (user.ActivationStatus == false)
{
    ...
    ViewData["Message"] = "<p>Your account has been activated, you're good to go.</p>";
}
    else 
{
    ViewData["Message"] = "<p>Sorry, this account has already been activated.</p>";
}
return View(); 

Посмотреть код:

<h2>Confirmation</h2>
<p><%: ViewData["Message"] %></p>

Во-вторых, в прошлом я использовал функцию MultiView в веб-формах asp.net. Эта функциональность идеальна и нравится реализовывать аналогичную функциональность в MVC.

Есть ли способ, которым я могу вызвать разные PartialViews в зависимости от результата функции (например, оператор 'if' выше) из кода контроллера в заполнитель в View?

3 ответа

Решение

<%: %> == Html.Encode(ViewData["Message"]);такое HTML кодирование вашей строки...

Попробуй это:

<%= ViewData["Message"]%>

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

Вы можете создать MvcHtmlString

<%: MvcHtmlString.Create(ViewData["Message"]) %>

Но на самом деле вы не должны иметь HTML в вашем контроллере. Сделав ваш взгляд строго типизированным, вы можете вместо этого сделать что-то подобное.

<h2>Confirmation</h2>
<% if(Model.ActivationStatus) { %>
  <p>Sorry, this account has already been activated.</p>
<% } else { %>
  <p>Your account has been activated, you're good to go.</p>
<% } %>

Измените вывод вашего представления на:

<h2>Confirmation</h2>
<p><%= ViewData["Message"] %></p>

Использовать только <%: %> синтаксис, когда вы хотите, чтобы вывод автоматически кодировался в HTML.

Другие вопросы по тегам