可点击的Webcontrol,ASP.NET

时间:2012-05-08 13:54:02

标签: c# asp.net button web-controls

如果您想要更多背景信息,这个问题与my last question有关。

我的问题是:是否可以在asp.net表格中创建单元格?

或者至少是否可以在ASP.NET中创建一个可点击的WebControl(应该可以放在ControlCollection中),而不是Button或LinkBut​​ton? 如果没有,是否可以在按钮文本中输入多行信息?

我已经尝试将其他组件添加到按钮的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。

5 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:1)

您可以使用字符串构建器向asp.net按钮添加多行,例如:

System.Text.StringBuilder buttonText = new System.Text.StringBuilder();
buttonText.AppendLine("first line");
buttonText.AppendLine("second line");
btnMultiline.Text = buttonText.ToString;

答案 2 :(得分:1)

我不确定你怎么想象会呈现这样的复合控件。请记住,最后每个ASP.NET控件都输出HTML。你按钮基本上输出

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

如果您想在<input>标记内放置任何其他内容,则必须与HTML兼容。我不确定输入标记是否允许其他HTML。

另一方面,如果它是LinkBut​​ton,则生成的HTML标记是<a href="">标记。你可以在那里放任何东西,甚至是你想要的图像,这些图像都可以点击。

我不确定你的完整情况是什么,但是你想要做的事情闻起来很糟糕。我建议您使用LinkBut​​ton或重新考虑您的方法,只需记住HTML中的最终输出。

答案 3 :(得分:0)

在阅读您的两篇文章时,您似乎希望能够点击单元格中的任何内容并将其回发,就好像整个单元格都是按钮一样?

如果是这样,其中一个相当简单的方法是建立你的单元格内容,就像你不想回发一样。然后添加样式为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>

答案 4 :(得分:-1)

  

如果没有,是否有可能将多行信息输入   按钮文字?

对于这种特殊情况,您只能通过CSS完成此操作;无需扩展Button:

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

它将呈现为:

enter image description here