2010-04-20 43 views
2

我擴展了textBox控件,並且我想在其OnLoad(EventArgs e)上調用一個javascript函數。我怎樣才能做到這一點?擴展asp.net的c#文本框控件

public partial class MyTextBox: TextBox 
{ 
protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     //call to a javascript function?    
    } 
} 
+1

你想達到什麼目的?您質疑混合了客戶端和服務器端的概念。 – Oded 2010-04-20 09:41:22

+0

我重申了我的問題。我希望現在更清楚。 – scatman 2010-04-20 09:46:14

+0

調用任何JavaScript函數...也許只是提醒(''); – scatman 2010-04-20 09:53:19

回答

2

html元素「輸入」

的更多信息和示例不具有負載的事件。 'body','img'和'window'。可能有其他人。

我建議你在自定義輸入(textboxes)中添加一個css類,然後使用類似jQuery的東西來處理頁面的加載事件,以在所有帶有該CSS類的文本框上執行你的函數。

以下示例假定您已在頁面中加載jQuery和jQueryUI。

public class MyTextBox: TextBox 
{ 
    public string DatePickerOptions { get; set; } 

    public string DateFormatString { get; set; } 

    public string EmptyDateText { get; set; } 

    public DateTime? Date 
    { 
     get 
     { 
      DateTime? date = null; 

      if (string.IsNullOrEmpty(Text)) 
       return date; 

      DateTime outDateTime; 
      if (DateTime.TryParse(Text, out outDateTime)) 
       date = outDateTime; 

      return date; 
     } 
     set 
     { 
      DateTime? date = value; 

      if (date == null || ((DateTime)date).Year < 2) 
       Text = EmptyDateText; 
      else 
       Text = ((DateTime) date).ToString(DateFormatString); 
     } 
    } 

    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     Text = EmptyDateText; 
    } 

    public override void RenderEndTag(System.Web.UI.HtmlTextWriter writer) 
    {   
     StringBuilder javaScriptBuilder = new StringBuilder(); 
     javaScriptBuilder.Append("$(function() { $(\"#"); 
     javaScriptBuilder.Append(ClientID); 
     javaScriptBuilder.Append("\").datepicker("); 
     javaScriptBuilder.Append(DatePickerOptions); 
     javaScriptBuilder.Append("); });"); 

     base.RenderEndTag(writer); 
     writer.WriteLine(); 
     writer.Write("<script type=\"text/javascript\">"); 
     writer.WriteLine(); 
     writer.Indent++; 
     writer.Write(javaScriptBuilder.ToString()); 
     writer.WriteLine(); 
     writer.Indent--; 
     writer.Write("</script>"); 
     writer.WriteLine(); 
     writer.Close(); 
    } 
} 
+0

如果你讓我們知道你想在頁面加載時發生這些輸入,我們可能會給你一個清晰的例子來說明如何實現它。 – pmawhinney 2010-04-21 00:36:36

+0

實際上我正在嘗試做的是將JQuery日曆附加到MyTexbox。我完全按照你所說的(添加一個css類......),一切正常。但後來我不得不更新頁面中的某些文本框的某些日曆(例如設置最小和最大日期或某些日曆的文化)。我無法做到這一點,因爲這將更新所有文本框可用的所有日曆的值,因爲它們都具有相同的CSS。這就是我想通過覆蓋onLoad事件來擴展文本框併爲每個texbox加載日曆的原因。 – scatman 2010-04-21 05:34:15

+0

我很高興你回答了我的問題。我碰巧已經建立了其中一個最近。上例中的自定義Web控件甚至允許您設置jQueryUI日期選擇器選項和日期格式字符串。希望能幫助到你。 – pmawhinney 2010-04-21 07:58:50

0

你想用javascript重載OnLoad事件(C#)嗎? 我認爲你不能這樣做。 或者你想在OnLoad事件中渲染一些JavaScript?

+0

不,我正在使用C#重寫方法,但我想調用此方法內的JavaScript函數。 – scatman 2010-04-20 09:40:38

+0

http://stackoverflow.com/questions/1577859/asp-net-javascript-object-component-for-composite-control 請看這個從SO。我認爲它可以幫助你。 – 2010-04-21 01:43:47

0

試試這個:

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 
    Response.Write("<script>your script</script>"); 
} 
1

我想你感到困惑......你想火JavaScript函數文本框的onload事件,對吧?那麼你不應該在服務器端而是在客戶端進行。也就是說,你不需要重載onload事件。如果你在構造函數中添加這個屬性,它應該做的伎倆! ;)

public class MyTextBox: TextBox 
{ 
    public MyTextBox() 
    { 
     this.Attributes.Add("OnLoad", "jsFunction();");   
    } 
} 
+0

我需要在所有頁面上的所有文本框上執行此操作,所以我認爲覆蓋OnLoad事件而不是在每個文本框的每個頁面上調用txtBox.Attributes.Add()將會好得多 – scatman 2010-04-20 09:48:53

+0

您是否嘗試過然而? – pmmaga 2010-04-20 11:12:59

+0

是的,我相信這可以工作,但你指定一個單一的文本框。正如我所說,我有很多文本框在項目中,我不能只是設置一個Attribure到每個文本框。我需要一種方法來設置屬性爲所有當前texboxes(和未來的)在一個屬性。這就是爲什麼我擴展文本框控制... – scatman 2010-04-20 12:08:15

0
public partial class MyTextBox: TextBox 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e);  
     this.Attributes.Add("OnLoad","alert('Im Loaded!');");   
    } 
} 
+0

我已經試過這個。但它沒有工作! – scatman 2010-04-20 10:13:27

1

根據您迴應佩德羅MM的嫌疑你想要的是這樣的:

public partial class MyTextBox: TextBox 
{ 
    protected override void OnInit(EventArgs e) 
    { 
     base.OnInit(e); 
     Attributes.Add("OnLoad", "jsFunction();");    
    } 
} 

的OnLoad(EventArgs的)是在服務器上的事件。它與網頁的JavaScript OnLoad事件沒有關係。

+0

它沒有工作。我測試了它:Attributes.Add(「OnLoad」,「alert('ok!');」);並啓動一個頁面,其中包含MyTextBox控件,並沒有警報發生.... – scatman 2010-04-20 10:46:25

+0

看到我的新答案:「HTML元素'輸入'沒有加載事件」 – pmawhinney 2010-04-21 03:11:29