2

これは、さらに背景情報が必要な場合に備えて、私の最後の質問に関連する質問です。

私の質問は: asp.net テーブルのセルをクリック可能にすることは可能ですか?

または、ASP.NET でボタンや LinkBut​​ton ではない、クリック可能な WebControl (ControlCollection に配置できるはずです) を作成することは少なくとも可能ですか? そうでない場合、ボタンテキストに複数行の情報を含めることは可能ですか?

子コンポーネントをボタンにレンダリングできるかどうかを確認するために、ボタンの ControlCollection に他のコンポーネントを追加しようとしました (これはButtonの Windows フォーム バージョンで動作していました)。

private void ModifyTableCell(TableCell cell)
{
    //Create new button
    Button btnCell = new Button();
    btnCell.Click += (sender, args) =>
    {
        //Event for the button
    };

    //Create new Label
    Label lblCell = new Label();
    lblCell.Font.Bold = true;
    lblCell.Text = "This text won't appear";

    btnCell.Controls.Add(lblCell); //Attempt to add label to Button
    cell.Controls.Add(btnCell);
}

編集:セル全体に複数行のLinkBut​​tonを作成するだけになりました。

4

5 に答える 5

6

onclick属性を割り当てて関数を活用することで、ほとんどすべてのコントロールをクリック可能にすることができ__doPostBackます。

ctrl.Attributes["onclick"] = string.Format("__doPostBack('{0}', '{1}');", ctrl.ClientID, "SomeArgument");

GetPostBackEventReferenceメソッドも使用できます。__doPostBackこのオプションは、まだ存在しない関数を登録するため、実際にはより安全です。

ctrl.Attributes["onclick"] = Page.ClientScript.GetPostBackEventReference(ctrl, string.Empty);

次に、コード ビハインドでRaisePostBackEventメソッドを単純にオーバーライドできます。

protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
    base.RaisePostBackEvent(source, eventArgument);

    if (eventArgument == "SomeArgument") //using the argument
    {
        //do whatever
    }
}
于 2012-05-08T14:12:20.990 に答える
1

次のような文字列ビルダーを使用して、asp.netボタンに複数の行を追加できます。

System.Text.StringBuilder buttonText = new System.Text.StringBuilder();
buttonText.AppendLine("first line");
buttonText.AppendLine("second line");
btnMultiline.Text = buttonText.ToString;
于 2012-05-08T14:13:11.300 に答える
1

このような複合コントロールがどのようにレンダリングされるかはわかりません。最後に各 ASP.NET コントロールが HTML を出力することに注意してください。You Button は基本的に

<input type="button">The button text</input>

タグ内に他のものを配置する場合は<input>、HTML 互換である必要があります。input タグが他の HTML を内部に許可するかどうかはわかりません。

一方、LinkBut​​ton の場合、生成される HTML マークアップは<a href="">タグです。そこには何でも入れることができます。必要に応じて、クリック可能になる画像も含めてください。

あなたの完全なシナリオが何であるかはわかりませんが、あなたがやろうとしていることは悪臭を放っています。LinkBut​​ton を使用するか、アプローチを再考することをお勧めします。ただし、HTML での最終出力がどうなるかを念頭に置いてください。

于 2012-05-08T14:25:29.300 に答える
0

両方の投稿を読むと、セル内の任意のものをクリックして、セル全体がボタンであるかのようにポストバックできるようにしたいように見えますか?

その場合、非常に簡単な方法の 1 つは、ポストバックを試みていない場合と同様に、セル コンテンツを作成することです。次に、スタイルのボタンを追加しますdisplay:none;。その後、クライアント側のスクリプトを使用してセルのクリック イベントをキャプチャし、ボタンのクリック イベントを発生させてポスト バックを発生させることができます。

これにより、任意の方法でセル コンテンツを作成でき、ポストバック コードとハンドラーが自動的に生成されます。

JQuery を使用すると、次のような結果になります。

<head runat="server">
    <style>
        input.ClickableCellButton
        {
            display: none;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(document).ready(function () {
            $("td.ClickableCell").click(function (event) { $(event.target).children("input.ClickableCellButton").click() });
        });
    </script>
    <div>
        <table>
            <tbody>
                <tr>
                    <td class="ClickableCell">
                        Cell Contents<br />
                        on multiple lines
                        <asp:Button ID="Button1" runat="server" Text="Button" CssClass="ClickableCellButton"
                            OnClick="Button1_Click" />
                    </td>
                </tr>
            </tbody>
        </table>
    </div>
    </form>
</body>
于 2012-05-08T14:41:21.050 に答える
-1

そうでない場合、ボタンテキストに複数行の情報を含めることは可能ですか?

この特定のケースでは、CSS を介してのみこれを実現できます。ボタンを拡張する必要はありません:

<asp:button id="myMultilineButton" runat="server" style="width:60px; white-space: normal;" Text="Several lines of text" />

次のようにレンダリングされます。

ここに画像の説明を入力

于 2012-05-08T14:33:24.137 に答える