2014-12-04 41 views
0

我試圖做一些比較簡單的,通過ViewBag傳遞數據的集合,通過它迭代,並顯示數據成片的JavaScript。我正在使用fullcalendar.js插件,只是試圖將生日添加到JavaScript代碼中。在PHP中,我只是使用echo '';來顯示數據,但我似乎無法在C#中重新創建它。我有這樣的嘗試了幾種方法:相當於在C#中的PHP回聲對嵌入式文本

@foreach (var birthday in ViewBag.MonthsBirthdays) 
      { 
       Response.Write("{"); 
        Response.Write("title:" + birthday.FullName); 
        Response.Write("start: new Date(" + birthday.BirthDate.Year + ", " + birthday.BirthDate.Month + ", " + birthday.BirthDate.Day + ")"); 
       Response.Write("},"); 

但在此之前的文檔,並呈現在頁面的頂部顯示所有生日這個發送數據。我試過了:

@foreach (var birthday in ViewBag.MonthsBirthdays) 
      { 
       Html.Raw("{"); 
        Html.Raw("title:"+birthday.FullName); 
        Html.Raw("start: new Date(" + birthday.BirthDate.Year + ", " + birthday.BirthDate.Month + ", " + birthday.BirthDate.Day + ")"); 
       Html.Raw("},"); 
      } 

但是這根本不打印任何東西。我也嘗試過使用<text></text>,但它開始在括號中引發語法錯誤。我正在使用剃鬚刀,這是一個.cshtml文件。有任何想法嗎?

而且,我可以證實的數據是存在的,迭代其實工作。

can confirm

+0

你試過了@ @ Html.Raw(「{」)'? – Rhumborl 2014-12-04 21:20:05

+0

@Rhumborl yes沒有呈現 – Typhomism 2014-12-04 21:20:26

+0

您確定MonthsBirthdays集合中有多少項目?嘗試僅打印該集合的長度或數量。 – Paul 2014-12-04 21:22:27

回答

4

嘗試使用剃刀 @("")

1

的直接語法有一個更優雅的方式來做到這一點。 首先創建一個類型來保存你的生日數據。

public class Birthday 
{ 
    public string Title { get; set; } 
    public DateTime Start { get; set; } 
} 

在Controller中填充您的集合。

var birthdays = GetData(); // Get IEnumerable<Birthday> 

// Return camelCased JSON. 
ViewBag.MonthsBirthdays = JsonConvert.SerializeObject(birthdays, new JsonSerializerSettings() { ContractResolver = new CamelCasePropertyNamesContractResolver() }); 

在您的視圖中,您將擁有以下代碼。

<script> 
    $('#myCalendar').fullCalendar({ 
     // some settings here 

     events: @Html.Raw(ViewBag.MonthsBirthdays) 
    }); 
</script> 

樣本相關輸出如下。

events: [{"title":"Beach Volleyball","start":"2014-12-04T11:00:00"},{"title":"Golf","start":"2014-12-14T15:00:00"},{"title":"Racquetball","start":"2014-12-02T20:00:00"}] 
+0

我絕對同意,但這有些不同,因爲輸出不是JSON,而是一個javascript對象('new Date(...)'部分)。所以這個對象會有點不同,需要一些額外的轉換。 – 2014-12-04 22:17:47

+0

是的,我同意如果這是出於這個問題的背景。但是,FullCalendar可以將ISO8601字符串作爲'start'參數,因此使用本機Date對象不是唯一的選擇。文檔建議使用ISO字符串。 (http://fullcalendar.io/docs/event_data/Event_Object/) – erdinger 2014-12-04 22:47:48

+0

很酷,很高興知道。 – 2014-12-05 00:32:27