我想要实现的是我想从asp.net将数据集传递给客户端javascript。 请参阅下面的c#代码:
DataSet ds = new DataSet();
using (SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Sql CONN"].ConnectionString))
{
using (SqlCommand cmd = new SqlCommand("spuGetDetailsById", con))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@BPId", SqlDbType.Int).Value = column2;
con.Open();
using (SqlDataAdapter da = new SqlDataAdapter(cmd))
{
da.Fill(ds);
}
}
}
var serializedDS = JsonConvert.SerializeObject(ds, Formatting.None, new JsonSerializerSettings()
{
ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore
});
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), serializedDS, "Func()", true);
数据集有2个表,我正确地接收数据。但是当我试图将它传递给javascript时,它显示未定义。 我的js代码:
function Func(serializedDS) {
if (serializedDS != null)
{
var a = serializedDS[0]; // The table1
var b = serializedDS[1]; // The table2
}
}
请帮忙。
编辑:
我也尝试过这种方法。它还将serializedDS定义为undefined。 Json序列化数据虽然在代码中显示数据集。
ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", string.Format("Func('{0}');", serializedDS), true);
答案 0 :(得分:0)
您需要在javascript方法中返回serializedDS
:
ScriptManager.RegisterStartupScript(Page, Page.GetType(),
"getSerializedDS",
$"return {serializedDS};",
true
);
稍后,您需要调用动态注册的函数来访问javascript中的数据集:
function Func() {
var serializedDS = getSerializedDS();
if (serializedDS != null)
{
var a = serializedDS[0]; // The table1
var b = serializedDS[1]; // The table2
}
}
但是,不需要注册函数来检索变量。为此目的使用RegisterClientScriptBlock
:
ScriptManager.RegisterClientScriptBlock(
Page,
Page.GetType(),
"initMyDs",
$"var myDs = {serializedDS}",
true
);
然后像往常一样访问javascript中的myDs
变量。
function Func() {
if (myDs != null)
{
var a = serializedDS[0]; // The table1
var b = serializedDS[1]; // The table2
}
}
此外,the ScriptManager
仅用于部分页面回发中使用的脚本 - 即当注册控件位于UpdatePanel
时。如果您不使用UpdatePanel
,请执行Page.ClientScript
:
Page.ClientScript.RegisterClientScriptBlock(
Page.GetType(),
"initMyDs",
$"var myDs = {serializedDS}",
true
);