2015-07-10 1 views
0

По какой-то причине мой ViewData выводит HTML-код, хотя я этого не хочу. Это то, что онMy 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> 

и мои Extensions

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

ноет: Я хотел бы также предложить не используя br тегов здесь и формат с помощью CSS.

+0

'мм' минут,' ММ' следует использовать в течение месяцев –

+0

@PanagiotisKanavos До того дня, когда я умру, я никогда не запомню, в каком направлении он должен быть! – DavidG

+0

Вот почему вопросы по форматированию/анализу DateTime в SO настолько распространены –