如果您想要更多背景信息,这个问题与my last question有关。
我的问题是:是否可以在asp.net表格中创建单元格?
或者至少是否可以在ASP.NET中创建一个可点击的WebControl(应该可以放在ControlCollection中),而不是Button或LinkButton? 如果没有,是否可以在按钮文本中输入多行信息?
我已经尝试将其他组件添加到按钮的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);
}
编辑:我最后只是为整个单元格创建了一个多行的LinkButton。
答案 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。
另一方面,如果它是LinkButton,则生成的HTML标记是<a href="">
标记。你可以在那里放任何东西,甚至是你想要的图像,这些图像都可以点击。
我不确定你的完整情况是什么,但是你想要做的事情闻起来很糟糕。我建议您使用LinkButton或重新考虑您的方法,只需记住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" />
它将呈现为: