2

我正在尝试使用 html 标记填充 ViewData 实例,如下所示。当页面呈现时,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>

其次,我过去曾在 asp.net webforms 中使用过 MultiView 功能。这个功能很理想,喜欢在 MVC 中实现类似的功能。

有什么方法可以根据从控制器代码到视图中的占位符的函数结果(如上面的“if”语句)调用不同的 PartialViews?

4

3 回答 3

4

<%: %>==Html.Encode(ViewData["Message"]);是 HTML 编码你的字符串...

试试这个:

<%= ViewData["Message"]%>

此外,您应该能够使用ViewData并根据ViewData您可以呈现不同部分的值来控制部分控件。您还可以将视图强烈键入到一个模型中,该模型代表您在页面上的行为......

于 2010-08-15T14:00:09.897 回答
4

您可以创建一个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>
<% } %>
于 2010-08-15T14:05:55.653 回答
2

将视图输出更改为:

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

<%: %> 当您希望输出自动进行 HTML 编码时才使用语法。

于 2010-08-15T14:03:12.713 回答