2015-07-10 18 views
0

出於某種原因,我的ViewData輸出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代碼在瀏覽器中 enter image description here

+0

你是什麼意思是什麼呢?你在瀏覽器窗口中看到HTML代碼嗎? – DavidG

+0

是的。我在瀏覽器窗口中看到了HTML代碼。 –

+0

你應該使用'@ Html.Raw(ViewData [「missingDays」])' –

回答

2

在MVC中,視圖應該執行所有與生成HTML相關的工作,而不是控制器。你可以重寫和簡化兩視圖和控制器如下:

查看:

@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; 
0

您需要將字符串轉換爲HTML:

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

可以在Html.Raw()包裹通話,像這樣:

@Html.Raw(ViewData["missingDays"]) 

但是, ter傳入數組而不是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。

+0

'mm'是分鐘,'MM'應該用幾個月 –

+0

@PanagiotisKanavos直到我死的那一天,我永遠不會記得它應該是哪個方向! – DavidG

+0

這就是爲什麼DateTime格式化/解析SO中的問題非常普遍 –