【发布时间】:2014-01-07 18:46:46
【问题描述】:
我遇到了一个问题,我的动态生成的 html 被转义并输出到屏幕上。这就是我所拥有的:
@{
string TrialMessage = string.Empty;
if ((bool)ViewBag.msd.IsOnTrial == true)
{
var expDate = (DateTime)ViewBag.msd.RenewalDate;
var daysToTrialExpiation = expDate.AddDays(1) - System.DateTime.UtcNow;
TrialMessage = "<b>Trial Ends in: <span style=\"color:[Color];\">" + (daysToTrialExpiation.Days) + "</span> Days</b>";
if (daysToTrialExpiation.Days > 5)
{
TrialMessage = TrialMessage.Replace("[Color]", "green");
}
else if (daysToTrialExpiation.Days > 2)
{
TrialMessage = TrialMessage.Replace("[Color]", "orange");
}
else if (daysToTrialExpiation.Days > 0)
{
TrialMessage = TrialMessage.Replace("[Color]", "red");
}
else
{
TrialMessage = "<b style=\"color: red;\"> Trial Ended " + Math.Abs(daysToTrialExpiation.Days) + " Days Ago</b>";
}
}
}
当我在视图中使用 TrialMessage 时,我会在屏幕上输出它的转义版本:
<b>Trial Ends in: <span style="color:green;">15</span> Days</b>
我曾尝试使用Html.Raw(TrialMessage),我什至尝试手动创建HTMLString,结果相同。我错过了什么?
更新:我在视图上输出的方式是:
@Html.Raw(TrialMessage)
【问题讨论】:
-
只是一个简短的说明;我强烈建议不要在视图中执行这样的逻辑。我建议为此视图构建一个 ViewModel 类,它会为您计算过期时间,这样您就可以将正确的值发送到视图,而无需在视图中存在此逻辑。这也将导致到期计算可在其他地方重复使用,而无需重复(如果您遵循良好的 OOP 原则)。您可能还希望创建一些客户 HtmlHelpers 来帮助生成您的自定义 html...再次尽可能避免在视图中进行处理。
-
将整行代码贴在你正在做 Html.Raw() 的地方
-
@quakkels,感谢您的建议,昨晚已经很晚了,我需要尽快解决这个问题(虽然没有发生)是的,我一定会这样做。话虽如此,这个问题仍然困扰着我,因为我找不到任何问题并且它不起作用大声笑
-
@iamkrillin,刚刚更新了问题
-
@hjavaher
Html.Raw应该可以工作。也许你在别处犯了错误。发布你的完整代码
标签: asp.net-mvc asp.net-mvc-4 razor