我的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;
出于某种原因,我的 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;