我正在尝试做一些相当简单的事情,通过ViewBag
传递一组数据,迭代它,并将数据显示为一段javascript。我正在使用fullcalendar.js插件,我只是想在javascript代码中添加生日。在PHP中,我只是使用echo '';
来显示数据,但我似乎无法在C#中重新创建它。我试过几个方法:
@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>
,但是它开始在括号上抛出语法错误。我使用的是razor,这是一个.cshtml
文件。有什么想法吗?
此外,我可以确认数据存在,迭代实际上正在运行。
答案 0 :(得分:4)
尝试使用razor的直接语法
@("")
答案 1 :(得分:2)
您可以尝试使用Output作家。
答案 2 :(得分: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"}]