2013-10-16 66 views
3

我想的工具提示總是一樣的ASP文本框的文本。當然我可以寫如何將ASP TextBox的文本綁定到其工具提示?

AnyTextBox.Text = "any text"; 
AnyTextBox.ToolTip = "any text"; 

但我不想重複數百個賦值語句。 我也可以爲Text屬性編寫更改事件處理程序,但我不想爲此編寫數十個事件處理程序(如果有更優雅的解決方案)

是否有?事情是這樣的:

<asp:TextBox ID="AnyTextBox" runat="server" ToolTip="binding magic goes here, but how?"> 

THX提前

回答

3

你可以寫從文本框繼承自己的自定義控制?我使用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"> 
+0

這個隱藏原始文本框的Text屬性,所以沒辦法設置文本。不應該使用_text支持字段,而應使用base.Text作爲支持。無論如何THX :-) –

+0

@ g.pickardou嘿,應該檢查了這個!優秀的點,更新的答案 – CodingIntrigue

0

您可以在文本框的TextChanged事件做到這一點:

<asp:TextBox ID="AnyTextBox" runat="server" TextChanged="AnyTextBoxTextChanged"> 

protected void AnyTextBoxTextChanged(object sender, EventArgs e) 
{ 
this.AnyTextBox.Tooltip = this.AnyTextBox.Text; 
} 
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負責處理此事件,那麼你只需要把它所有的行爲應該以這種方式頁面。或者您可以讓所有頁面從一個基本頁面繼承。

+0

這真的很不錯。出於興趣,您選擇將Control與兩種類型的「WebControl」和「ITextControl」而不是簡單的TextBox進行比較的原因是什麼? – CodingIntrigue

+0

@Rraham:這可能是[所有帶有'Text'屬性的web控件](http://stackoverflow.com/q/2609066/284240)所需要的,所以就是這樣。否則,只需檢查「文本框」。但是,如果控件嵌套在像GridViews這樣的容器控件中(測試過),這也可以工作。 –

+0

但ITextControl沒有ToolTip屬性,所以如果控件沒有顯式聲明ToolTip屬性,可能不會失敗? – CodingIntrigue

2

我想使用JavaScript事件處理程序將是你最簡單的解決方案。儘管如此,您不需要編寫數百個事件處理程序。只需編寫一個文件,然後對所有文本框使用相同的事件處理程序!

<asp:TextBox ID="AnyTextBox" runat="server" onchange="setTooltip(this)" /> 

然後腳本會

function setTooltip(textbox) { 
    textbox.title = textbox.value; 
} 

這就是它!爲您希望具有此工具提示行爲的所有文本框設置onchange事件。

+2

但是即使用戶沒有改變任何東西,工具提示應該是文字。 –

+0

這是非常真實的;因此,在文本框可能預先填充示例文本的情況下,我的答案是不可接受的!好的觀察。 – pineconesundae

0

這取決於如果您正在尋找「實時更新」工具提示=即你要更改的工具提示,當用戶更改網站上的文字?然後使用輸入和JS函數的「onchange」事件,它會在每個事件調用中改變它的「title」屬性。

或者你想減輕服務器端的工作,不想指定工具提示和文本的每個項目,然後用定製的控制方式去(我建議RGraham代碼)。

或匹配這兩種方法,並使用自定義的控制,這也將提供JS「刷新」代碼:-)

0

嘗試使用jQuery

$(function() { 

     var maybe = true; 
     var text = $('.myTextBox').val(); 
     if (maybe) { 
      $('.myTextBox').attr('title', text); 
     } 

    }); 
相關問題