从后面的 ASP.NET C# 代码解析二维数组到 Javascript
Parse 2D array from ASP.NET C# code behind to Javascript
我编写了一个函数 (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);
}
尝试在添加脚本时将数据转换为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);
使用包含 $(document).ready()
函数的 <asp:Literal id="StartupScript" runat=server />
控件来注入页面加载标注可能更简单。
您可以将语句写入 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();
}
我编写了一个函数 (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);
}
尝试在添加脚本时将数据转换为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);
使用包含 $(document).ready()
函数的 <asp:Literal id="StartupScript" runat=server />
控件来注入页面加载标注可能更简单。
您可以将语句写入 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();
}