2013-07-05 40 views
4

我試圖將公共字典從c#傳遞給asp.net。如何將代碼後面的Dictionary <string,string>變量傳遞給asp.net?

這裏是我的代碼:

代碼背後:

public Dictionary<string, List<string>> dict = new Dictionary<string, List<string>>(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     if (!IsPostBack) 
     { 
      RetrieveDataField(); 
     } 
    } 

void RetrieveDataField() 
{ 

    DataDefinitionResponse[] _dr = _service.DataDefinitionList(_companyID); 

    DataTable dt = new DataTable(); 
    dt.Columns.Add("Name"); 
    dt.Columns.Add("Type"); 

    foreach (DataDefinitionResponse dr in _dr) 
    { 
     if (dr.Type != "Group" && dr.Type != "File") 
     { 
      DataRow row = dt.NewRow(); 
      row["Name"] = dr.Name; 
      row["Type"] = dr.Type; 
      dt.Rows.Add(row); 
      if (dr.Type == "Dropdown") 
      { 
       string[] strSplit = dr.ListValue.Split('|'); 
       List<string> lst = new List<string>(); 

       foreach (string word in strSplit) 
       { 
        lst.Add(word); 
       } 
       dict.Add(dr.Name, lst); 
      } 
     } 
    } 

    ddlFieldName.DataSource = dt; 
    ddlFieldName.DataTextField = "Name"; 
    ddlFieldName.DataValueField = "Type"; 
    ddlFieldName.DataBind(); 


} 

ASP:

<script type="text/javascript"> 
    $(document).ready(function() { 

     alert(<%=dict%>); //Error here 
     $("#MainContent_ddlFieldName").live("change", function() { 
      $.ajax({ 
       type: "POST", 
       url: "WebService/WebFunction.asmx/PopulateDropdown", 
       data: "{'dict': '" + 'a' + "'}", 
       contentType: 'application/json; charset=utf-8', 
       dataType: 'json', 
       success: function (data) { 
        // data.d; 
        // $("#txtBLShipperContactNo").val(data.d); 
        alert(data.d); 

       }, 
       error: function (XMLHttpRequest, textStatus, errorThrown) { 
        alert("Error Shipper: " + errorThrown); 
       } 
      }); 

     }); 
    }); 
</script> 

有什麼想法?

+0

這個錯誤到底是什麼? –

+0

您能否詳細說明您正在嘗試使用Dictionary變量? –

回答

1

我真的不知道你的代碼產生的錯誤,但這裏是我知道的。字典應添加或'綁定'這樣的:

DataTable dt = new DataTable(); 
Dictionary<string,string> dict = new Dictionary<string,string>(); 
dt.Columns.Add(new DataColumn("Name", typeof(string))); 
dt.Columns.Add(new DataColumn("Type", typeof(string))); 

foreach (DataDefinitionResponse dr in _dr) 
{ 
    if (dr.Type != "Group" && dr.Type != "File") 
    { 
     DataRow row = dt.NewRow(); 
     row["Name"] = dr["Name"].toString(); 
     row["Type"] = dr["Key"].toString; 
     dt.Rows.Add(row); 
    } 
} 

foreach(DataRow dr in dt.Rows) 
{ 
    dict.Add(dr.ItemArray[0].ToString(), dr.ItemArray[1].ToString()); 
} 

ddlFieldName.DataSource = dict; // the dictionary should be here 
ddlFieldName.DataTextField = "Key"; 
ddlFieldName.DataValueField = "Value"; 
ddlFieldName.DataBind(); 

或做第一foreach循環這樣內的字典元件的添加:

foreach (DataDefinitionResponse dr in _dr) 
    { 
     if (dr.Type != "Group" && dr.Type != "File") 
     { 
      DataRow row = dt.NewRow(); 
      row["Name"] = dr["Name"].toString(); 
      row["Type"] = dr["Key"].toString(); 
      dt.Rows.Add(row); 

      dict.Add(dr["Key"].ToString(), dr["Name"].ToString()); 
    } 
} 
ddlFieldName.DataSource = dict; // the dictionary should be here 
ddlFieldName.DataTextField = "Key"; 
ddlFieldName.DataValueField = "Value"; 
ddlFieldName.DataBind(); 

UPDATE

您正在以錯誤的方式聲明或初始化您的列。你可以嘗試我的更新。

4

當你使用<%=dict%>時,編譯器正在執行默認的ToString()方法,所以你得到類似alert(System.Collections.Generic.Dictionary...);的東西。注意這裏沒有引號,所以它會產生一個javascript錯誤。你可以通過用引號括起來來「解決」這個問題:alert("<%=dict%>");

但是,這可能不是你想要做的。你很可能試圖將實際的字典變成一個Javascript對象。爲此,您可以使用javascript的JSON.parseSystem.Web.Script.Serialization.JavaScriptSerializer將數據作爲JSON對象輸出。如果您使用的是jQuery,那麼您可以使用parseJSON,否則您可以在大多數瀏覽器上使用JSON.parse,我認爲(我總是使用jQuery,所以我比瀏覽器提供的JSON.parse更加熟悉它)。

下面是一些代碼輸出目標,以JSON:

public string DictJSON 
{ 
    get { 
     JavaScriptSerializer jSer = new JavaScriptSerializer(); 
     return jSer.Serialize(dict); 
    } 
} 

,這裏是你將如何使用它,使用jQuery:

$.parseJSON('<%=DictJSON %>'); 

注意JavaScriptSerializer是System.Web程序的一部分.Extensions.dll,所以你需要添加一個對它的引用。它不能處理所有的對象類型,但Dictionary應該是好的,就像List一樣。另外,由於它使用雙引號輸出JSON對象字符串,因此請確保在parseJSON中使用單引號。

相關問題