2017-09-30 80 views
0

我想實現的是我想從asp.net傳遞數據集到客戶端JavaScript。 請參閱下面的C#代碼:將數據集傳遞給客戶端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時,它顯示爲undefined。 我的js代碼:

function Func(serializedDS) { 
    if (serializedDS != null) 
    { 
     var a = serializedDS[0]; // The table1 
     var b = serializedDS[1]; // The table2 
    } 
} 

請幫忙。

編輯:

我也試過這個方法。它也給serializedDS未定義。 Json序列化數據雖然在代碼中顯示數據集。

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", string.Format("Func('{0}');", serializedDS), true); 

回答

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 
); 

然後訪問myDs變量在JavaScript如常。

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 
); 
相關問題