出于某种原因,我的ViewData输出HTML代码,即使我不想这样做。 这就是它
<div ng-controller="courseReview">
<!-- radio input -->
<input class="star-5" id="wstar-5" rating="5" type="radio" name="welcome" ng-click="rateThis(this)"/>
</div>
但我只是希望它看起来像这样
<br /><a href="javascript:SetDate('2015-04-01');">2015-04-01</a>
<br /><a href="javascript:SetDate('2015-04-02');">2015-04-02</a>
<br /><a href="javascript:SetDate('2015-04-07');">2015-04-07</a>
<br /><a href="javascript:SetDate('2015-04-08');">2015-04-08</a>
<br /><a href="javascript:SetDate('2015-04-09');">2015-04-09</a>
<br /><a href="javascript:SetDate('2015-04-10');">2015-04-10</a>
这是我的控制器的一部分:
Du har ej rapporterat tid följande dagar:
2015-04-01
2015-04-02
2015-04-07
2015-04-08
2015-04-09
2015-04-10
这是我认为的:
var missingdays = new DatabaseLayer().GetConsultantMissingDays(Constants.CurrentUser(User.Identity.Name));
if (missingdays.Count == 0)
{
ViewData["missingDays"] = "";
}
else
ViewData["missingDays"] = "Du har ej rapporterat tid följande dagar:<br />" +
string.Join("<br />", missingdays.Select(x => x.ToMissingDateJavascript()));
ViewData.Model = projectData;
return View();
}
和我的扩展程序
<div>
@ViewData["missingDays"]
@Html.ValidationSummary()
</div>
但是我在浏览器中看到了HTML代码
答案 0 :(得分:4)
您可以将呼叫包裹在Html.Raw()
中,如下所示:
@Html.Raw(ViewData["missingDays"])
但是,最好传入一个数组而不是HTML(甚至在视图模型中传递它)。您应该尽可能避免在控制器中使用任何HTML。例如:
@foreach(var date in (List<DateTime>)ViewData["stuff"])
{
<a href="javascript:SetDate('@date.ToString("yyyy-MM-dd")');">
@date.ToString("yyyy-MM-dd")
</a>
<br/>
}
Noet:我还建议不要在这里使用br
标签并使用CSS格式化。
答案 1 :(得分:2)
在MVC中,View应该执行与生成HTML相关的所有工作,而不是Controller。您可以按如下方式重写和简化视图和控制器:
查看:
@foreach(var date in ViewBag.MissingDays){
var isoDate=date.ToString("yyyy-MM-dd");
<br/><a href="javascript:SetDate('@isodDate');">@isoDate</a>
}
控制器:
//Assuming that missingdays is a List<DateTime> or other IEnumerable<DateTime>
ViewBag.MissingDays=missingdays;
答案 2 :(得分:0)
您需要将字符串转换为HTML:
@{
string missingDays = ViewData["missingDays"]
}
@MvcHtmlString.Create(missingDays)