1

私のページの1つに次のC#コードがあります。

protected override void Render(HtmlTextWriter writer) 
    {
        //an array named fieldNames is delcared here

        writer.Write("<form id=\"Form1\" runat=\"server\" action=\"\">");
        writer.Write("<asp:checkboxlist id=\"checkBoxes\" runat=\"server\">");
        for (int count = 0; count < fieldNames.GetLength(0); count++)
        {  //iterates over the array of field names
            writer.Write("<asp:listitem text=" + fieldNames[count] + " value=" + fieldNames[count] + "/>");
        }
        writer.Write("</asp:checkboxlist>");
        writer.Write("</form>");
    }

目的は、属性が動的に設定されているチェックボックスのリストを作成することです。

実行すると、エラーはスローされませんが、ページにコントロールは表示されません。

ページのソースを表示すると、次のhtmlが表示されます。

<form id="Form1" runat="server" action="">
    <asp:checkboxlist id="checkBoxes" runat="server">
        <asp:listitem text='Spares Part No' value='Spares Part No'/>
        <asp:listitem text='Description' value='Description'/>
        <asp:listitem text='Site' value='Site'/>
        <asp:listitem text='Rack/Bin Number' value='Rack/Bin Number'/>
    </asp:checkboxlist>
</form>

興味深いことに、これを別のアプリケーションに投稿しましたが、すべてのコントロールが表示されていても問題なく動作します。

これは、イベントが呼び出される順序に問題がありますか?私は次に何を試すべきかについて少し途方に暮れているので、どんなアドバイスも素晴らしいでしょう。

ありがとう、

オリバー

4

3 に答える 3

1

基本的にこれを行うことはできません。

Renderイベントは、ページのライフサイクルの非常に遅い段階で発生します。マークアップを解析したり、コントロールをインスタンス化したりするイベントはすでに実行されているため、ASPXマークアップを出力することはできません。

マークアップのページにPlaceHolderコントロールを追加してから、以前のイベント(InitやLoadなど)で、そのプレースホルダーに必要なコントロールを追加する必要があります。ここでも、ASPXマークアップを書き出すことはできませんが、次のようにコントロールをインスタンス化する必要があります。

var checkbox = new CheckboxList { Id = "checkBoxes" };
uxPlaceHolder.Controls.Add(checkbox);
checkbox.Items.Add(new ListItem { Text = "...", Value = "..." });

必要なことを実現する1つの方法は、VirtualPathProviderを使用して、フレームワークによって要求された.aspx要求のマークアップを生成することです。または、実際に生成するHTML出力(つまり、JavaScriptが関連付けられた入力要素のリスト)を確認して、これらを直接レンダリングすることもできます。ただし、これらは両方とも厄介なハックとして分類されるはずです。

于 2011-08-12T10:21:25.857 に答える
0

サーバー側のコードをレンダリングしていますが、これはブラウザが理解できません。

ページをレンダリングする前に、CheckBoxListとそのをフォームに追加する必要があります。ListItem

サーバー側のコントロールは、ブラウザーのhtmlをレンダリングします。通常、サーバー側のマークアップを解析するAsp.Netによって作成されます。

于 2011-08-12T10:20:19.587 に答える
0

ブラウザにHTMLコンテンツを直接書き込んでいるため、HTMLタグのみを使用する必要があります。

于 2011-08-12T10:46:31.360 に答える