0

プログラムで生成された折りたたみ可能なパネル エクステンダを、パネルなどと一緒に JavaScript を介して返すことができるようにしたいと考えています。パネルと関連するテーブルは正常に動作していますが、cpe を接続しようとすると壊れます。そしてエラーを返します:

cpeパネルなどはWebServiceによって生成されており、JSにWebサービスが特定のフィールドに動的に返すものを書き込もうとしています

Microsoft JScript runtime error: Sys.Net.WebServiceFailedException: The server method 'Sub_Menu_Helper' failed with the following error: System.InvalidOperationException-- Page cannot be null. Please ensure that this operation is being performed in the context of an ASP.NET request.

                {
                    Label somelabel = new Label();
                    somelabel.ID = somenumber.ToString();
                    somelabel.Text = somenumber.ToString();
                    subpnlContent.Controls.Add(somelabel);
                    ++somenumber;
                }

                CollapsiblePanelExtender cpeMenuLast = new CollapsiblePanelExtenderEx();
                cpeMenuLast.ID = "subcpe" + strMenuId + strParentHierarchyIds;
                cpeMenuLast.TargetControlID = "subpnlContent" + strParentMenuId + "_" + strMenuId;
                cpeMenuLast.ExpandControlID = "cellContent" + strParentMenuId + "_" + strMenuId;
                cpeMenuLast.CollapseControlID = "cellContent" + strParentMenuId + "_" + strMenuId;
                cpeMenuLast.Collapsed = bCollapsed;
                cpeMenuLast.TextLabelID = strMenuName;
                cpeMenuLast.ExpandedText = m_strButtonLabelHide;
                cpeMenuLast.CollapsedText = m_strButtonLabelShow;
                cpeMenuLast.ImageControlID = "imglnk" + strMenuId;
                cpeMenuLast.CollapsedImage = "~/App_Themes/default/nbExpand.gif";
                cpeMenuLast.ExpandedImage = "~/App_Themes/default/nbCollapse.gif";
                cpeMenuLast.SuppressPostBack = true;
                cpeMenuLast.ScrollContents = false;

                //Add Everything
                cellSubMenu.Controls.Add(subpnlContent);
                cellSubMenu.Controls.Add(cpeMenuLast);
                row.Cells.Add(cellSubMenu);
                tbl.Rows.Add(row);

                using (StringWriter sw = new StringWriter(sb))
                {
                    using (HtmlTextWriter tw = new HtmlTextWriter(sw))
                    {
                        tbl.RenderControl(tw);
                    }
                }

どうすればこれを修正できますか?

4

1 に答える 1

0

をレンダリングするには を持つPageオブジェクトが必要なようです。これは、適切に動作させるために何らかのスクリプトが必要であるため、理にかなっています。ScriptManagerCollapsiblePanelExtender

したがって、テーブルをレンダリングするために次の方法を試すことができます。

var page = new Page();
page.Controls.Add(new ScriptManager());
page.Controls.Add(tbl);
var writer = new StringWriter();
HttpContext.Current.Server.Execute(page, writer, false);
return writer.ToString();

オリバー

于 2010-01-07T10:01:15.290 に答える