2011-12-29 13 views
2

我使用jQuery的序列化()與asp.net服務器控件。jquery序列化和.net控件

 <asp:DropDownList ID="ddFirmaAd" runat="server" Width="180" Height="25"> 
     </asp:DropDownList> 

當我打印數組

ajaxRequest("AjaxServices/Insert.aspx", $("#aspnetForm").serialize(), $('#returnMessage'), 0, $(this)); 

function ajaxRequest(pageURL, queryString, putArea, timeout, disabledCtrl) { 
     if (disabledCtrl != null) 
      disabledCtrl.attr("disabled", "true"); 
     $.ajax({ 
      async: true, 
      timeout: timeout, 
      cache: false, 
      url: pageURL + "?" + queryString, 


alert($("#aspnetForm").find("input,textarea,select,hidden").not("#__VIEWSTATE,#__EVENTVALIDATION").serialize()); 

會打印窗口ddFirmaAd客戶端名稱= 「CT100%24ct100%24ContentPlaceHolder1%24ContentPlaceHolder1%24ddFirmaAd = 2」

我想ddFirmaAd。了selectedValue上後面的代碼

string value = request.queryString("ddFirmaAd"); 

但控制名稱= CT100%24ct100% 24ContentPlaceHolder1%24ContentPlaceHolder1%24ddFirmaAd

如何使用serialize()和.net控件?

+1

wut?.......... – BentOnCoding 2011-12-29 18:22:03

+0

@Robotsushi:ASP.NET自動將元素的'name'屬性設置爲完全限定的控件層次結構名稱,使得它們在代碼中幾乎不可用在ASP.NET服務器控制生態系統之外。他使用jQuery進行序列化,jQuery使用'name'屬性來構建表單值(因爲HTTP POST使用'name'屬性來標識'form'元素)。大概是將它們發送到不同的頁面(而不是具有控件的可回收頁面)。因此,難以查詢字符串值。 – David 2011-12-29 18:34:03

+0

爲什麼要序列化.net控件? (不批評只是好奇你的用例) – BentOnCoding 2011-12-29 18:39:19

回答

1

如何string value = request.QueryString(ddFirmaAd.ClientID);

但如果這些值傳遞到不同的頁面,您可以破解它是這樣的:

string value = GetValueById("ddFirmaAd");

private string GetValueById(string endsWith) 
    { 
     var qs = HttpContext.Current.Request.QueryString; 
     foreach(var key in qs) 
     { 
      string skey = key.ToString(); 
      if(skey.EndsWith(endsWith)) 
      { 
       return qs[skey]; 
      } 

     } 
     return string.Empty; 
    } 

並不是說這是正確的。根據當前提供的問題描述,根本無法提供更好的解決方案。

您可以將ClientIDMode配置爲靜態,但隨後維護唯一ID成爲您的責任,並可能導致難以找到客戶端錯誤。

+0

它不能。我用serialize()方法發佈數據在另一個文件上 – 2011-12-29 18:32:19

+0

我編輯問題。 – 2011-12-29 18:33:35

+0

@erkandemir我編輯了我的答案 – 2011-12-29 18:54:27