用于内联文本的C#中的php echo相当于

时间:2014-12-04 21:17:22

标签: c# razor

我正在尝试做一些相当简单的事情,通过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文件。有什么想法吗?

此外,我可以确认数据存在,迭代实际上正在运行。

can confirm

3 个答案:

答案 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"}]