我的viewdata吐出HTML,

时间:2015-07-10 07:24:13

标签: asp.net-mvc asp.net-mvc-5 asp.net-mvc-5.1

出于某种原因,我的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代码 enter image description here

3 个答案:

答案 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)