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

Я пытаюсь заполнить экземпляр 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 ]

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

Вы можете создать 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>
<% } %>
3 голосов
/ 15 августа 2010

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

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

<%= ViewData["Message"]%>

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

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

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

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

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

...