我的viewdata吐出来HTML,

My viewdata spits out HTML,

出于某种原因,我的 ViewData 输出了 HTML 代码,尽管我不希望它这样做。 就是这样

<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>

和我的扩展

        public static string ToMissingDateJavascript(this DateTime value) {
        string dateString = value.ToString("yyyy-MM-dd");
        return "<a href=\"javascript:SetDate('" + dateString + "');\">" + dateString + "</a>";
    }        

    public static bool IsWeekend(this DateTime value) {
        return value.DayOfWeek == DayOfWeek.Saturday || value.DayOfWeek == DayOfWeek.Sunday;
    }

但我在浏览器中看到 HTML 代码

您需要将字符串转换为 HTML:

@{
     string missingDays = ViewData["missingDays"]
}
@MvcHtmlString.Create(missingDays)

您可以将调用包装在 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.

进行格式化

在 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;