我希望ToolTip始终与ASP TextBox的Text相同。我当然可以写
AnyTextBox.Text = "any text";
AnyTextBox.ToolTip = "any text";
但我不想复制数百个赋值语句。 我也可以为Text属性编写更改事件处理程序,但我不想为此编写几十个事件处理程序(如果有更优雅的解决方案)
有吗?像这样:
<asp:TextBox ID="AnyTextBox" runat="server" ToolTip="binding magic goes here, but how?">
提前谢谢
答案 0 :(得分:3)
您可以编写自己的继承自TextBox的自定义控件吗?我使用Text属性来设置工具提示,但如果需要,可以反过来做。
<强>控制:强>
public class TooltipTextBox : TextBox {
public new string Text {
get { return base.Text; }
set
{
base.Text = value;
this.ToolTip = value;
}
}
}
<强>标记:强>
<my:TooltipTextBox ID="AnyTextBox" runat="server" Text="binding magic goes here">
答案 1 :(得分:2)
据我所知,没有这样的自动化。对于它的价值,也许你可以使用PreRender
:
protected void Page_PreRender(Object sender, EventArgs e)
{
var allTextControlsWithTooltips = new List<WebControl>();
var stack = new Stack<Control>(this.Controls.Cast<Control>());
while (stack.Count > 0)
{
Control currentControl = stack.Pop();
if (currentControl is WebControl && currentControl is ITextControl)
allTextControlsWithTooltips.Add((WebControl)currentControl);
foreach (Control control in currentControl.Controls)
stack.Push(control);
}
foreach (var txt in allTextControlsWithTooltips)
txt.ToolTip = ((ITextControl)txt).Text;
}
您还可以使用处理此事件的UserControl
,然后您只需将其放在应该以这种方式运行的所有页面上。或者你可以让所有页面都从一个基页继承。
答案 2 :(得分:2)
我认为使用JavaScript事件处理程序将是您最简单的解决方案。但是,您不需要编写数百个事件处理程序。只需编写一个,然后为所有文本框使用相同的事件处理程序!
<asp:TextBox ID="AnyTextBox" runat="server" onchange="setTooltip(this)" />
然后脚本将是
function setTooltip(textbox) {
textbox.title = textbox.value;
}
就是这样!为您希望拥有此工具提示行为的所有文本框设置onchange事件。
答案 3 :(得分:0)
您可以在文本框的TextChanged事件中执行此操作:
<asp:TextBox ID="AnyTextBox" runat="server" TextChanged="AnyTextBoxTextChanged">
protected void AnyTextBoxTextChanged(object sender, EventArgs e)
{
this.AnyTextBox.Tooltip = this.AnyTextBox.Text;
}
答案 4 :(得分:0)
这取决于您是否正在寻找工具提示的“实时更新”,即您是否要在用户更改网站上的文本时更改工具提示?然后使用输入和JS函数的“onchange”事件,它将在每次事件调用时更改其“title”属性。
或者您希望简化服务器端的工作并且不想为每个项目指定工具提示和文本,然后使用自定义控制方式(我建议使用RGraham代码)。
或者匹配两种方法并使用也提供JS“刷新”代码的自定义控件: - )
答案 5 :(得分:0)
尝试使用jquery
$(function () {
var maybe = true;
var text = $('.myTextBox').val();
if (maybe) {
$('.myTextBox').attr('title', text);
}
});