Проблема рендеринга 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.