将ASP.NET C#代码中的2D数组解析为Javascript

时间:2016-03-10 15:56:35

标签: javascript c# jquery asp.net webforms

我编写了一个函数(addCalendarEvents),它接受一个数组(事件)并解析成一个自定义日历。当它通过document.ready函数,事件正在注册等等时,一切正常。

的Javascript

$(document).ready(function () {
    loadCalendar(null);
    addCalendarEvents([{ title: 'All Day Event', start: '2016-01-01' }, { title: 'Long Events', start: '2016-01-07', end: '2016-01-10' }]);     
});

function addCalendarEvents(events) {
    $('#calendar').fullCalendar('addEventSource', events)
}

但是,我还需要通过代码解雇它们以动态添加事件。我尝试过使用ScriptManager的RegisterStartupScript,但它没有用。我有这样的方法吗?

C#代码背后

protected void Page_Load(object sender, EventArgs e) 
{
    ScriptManager.RegisterStartupScript(this, this.GetType(), "addEvents", "addCalendarEvents([{ title: 'Other Event', start: '2016-01-01' }, { title: 'Other Long Events', start: '2016-01-07', end: '2016-01-10' }]);", true);
}

2 个答案:

答案 0 :(得分:0)

尝试在添加脚本时将数据转换为json。添加程序集

using this Assembly
using System.Web.Script.Serialization;

然后反序列化您的对象

var json = new JavaScriptSerializer().Serialize(obj);

然后调用registerStartupScript

ScriptManager.RegisterStartupScript(this, this.GetType(), "addEvents", json, true);

并在客户端执行此操作将其转换为json

var obj = JSON.parse(string);

答案 1 :(得分:0)

使用包含<asp:Literal id="StartupScript" runat=server />函数的$(document).ready()控件来注入页面加载标注可能更简单。

您可以在Page_Load事件中将语句写入文字控件,当页面准备好时,它们应该由客户端执行。

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="WebApplication4.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
    <asp:Literal ID="CodeInject" runat="server"/>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    
    </div>
    </form>
</body>
</html>

背后的代码是:

 protected void Page_Load(object sender, EventArgs e)
    {
        StringBuilder SB = new StringBuilder();
        SB.Append("<script>");
        SB.Append("$(document).ready(function () {");

        // statements here
        SB.Append("alert('test');");


        SB.Append("});</script>");
        CodeInject.Text = SB.ToString();
    }