0

マスター ページを使用している ASP ページがあります。コード ビハインド ページで [Webmethod] への AJAX 呼び出しを使用して、ページにいくつかのパネルを作成します。これがページ自体の構造です...

<form runat="server" class="form-horizontal" id="frm_estRequest">
   <div id="mainContent" runat="server" >
    <div id="contentInner" runat="server>
           <asp:Panel  id="comp_list" runat="server"></asp:Panel>
        </div>
   </div>
</form>

Web メソッドを使用して、動的に作成されたコントロールを「comp_list」パネルに追加します。これは、webmethod で作成されている html です...

Panel component = new Panel();
component.ID = "comp" + compNumber;
component.Controls.Add(new LiteralControl("<input type='hidden' value='" + 
compType + "' ID='compType_" + compNumber + "'/>"));

だから私がやろうとしているのは、Html Hiddenfield から値を取得することです。これが私がしなければならないことです(何らかの理由で機能していません)。

ContentPlaceHolder cph =(ContentPlaceHolder)this.Master.FindControl("placeholder_content");
Control compList = (Control)cph.FindControl("frm_estRequest").FindControl("mainContent").FindControl("contentInner").FindControl("comp_list");
Control ct = (Control) compList.FindControl("comp" + i.ToString());
HiddenField compType = (HiddenField)ct.FindControl("compType_" + i.ToString());

「comp_list」コントロールを取得することはできますが、それは私が取得できるものではありません。ct が null だと言い続けます。参考までに、i は、ページに追加されたコントロールを追跡するために使用される単なるカウンターです。私の唯一の考えは、おそらくclientIDを使用する必要があるということです。これに関する任意の助けをいただければ幸いです。

コントロールはhtmlとしてレンダリングされ、ajax経由でページに返され、divに追加されます...

System.Text.StringBuilder sb = new System.Text.StringBuilder();
System.IO.StringWriter tw = new System.IO.StringWriter(sb);
HtmlTextWriter hw = new HtmlTextWriter(tw);
component.RenderControl(hw); 
return sb.ToString();

var req = $.ajax({ 
                    type: "POST", 
                    url: "EstRequest.aspx/createComponent", 
                    data: params,
                    contentType: "application/json; charset=utf-8", 
                    dataType: "json", 
                    success: function (data) { 
                            $('#<%= comp_list.ClientID%>').append(data.d) 
                            document.getElementById('<%= compNumber.ClientID %>').value = comp + 1;

                            $("#<%= compNumber.ClientID %>").live("click", function() {
                            $(this).next().slideToggle("fast")}); 

                            }, 
                    error: function (response) { debugger; alert("Error: " + params); }, 
                    failure: function (response) { 
                        alert(response.d); 
                    } 
                }) 
4

1 に答える 1

0

`パネル コンポーネント = new Panel(); component.ID = "comp" + compNumber; component.Controls.Add(new LiteralControl(""));

//ここに一行追加

comp_list.Add(コンポーネント);`

今すぐ試してみてください。

于 2012-07-06T20:21:57.747 に答える