簡體   English   中英

擴展asp.net的C#文本框控件

[英]extending c# textbox control of asp.net

我正在擴展textBox控件,並且想在其OnLoad(EventArgs e)上調用javascript函數。 我怎樣才能做到這一點?

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

html元素“輸入”沒有加載事件。 'body','img'和'window'都可以。 可能還有其他。

我建議您在自定義輸入(文本框)中添加一個css類,然后使用jQuery之類的方法來處理頁面的load事件,以在具有該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();
    }
}

我認為您很困惑...您想向文本框的onload事件觸發一個javascript函數,對嗎? 然后,您不應該在服務器端,而是在客戶端。 就是說,您不需要覆蓋onload事件。 如果在構造函數中添加此屬性,就可以解決問題! ;)

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

根據您對Pedro MM的回答,您懷疑您想要的是:

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

OnLoad(EventArgs e)是服務器上的事件。 它與網頁的JavaScript OnLoad事件無關。

您想用JavaScript重載OnLoad事件(C#)嗎? 我認為您無法做到。 或者您想在OnLoad事件中呈現一些JavaScript?

嘗試這個:

protected override void OnLoad(EventArgs e)  
{  
    base.OnLoad(e);  
    Response.Write("<script>your script</script>");
}
public partial class MyTextBox: TextBox  
{ 
    protected override void OnLoad(EventArgs e)   
    {   
        base.OnLoad(e);    
        this.Attributes.Add("OnLoad","alert('Im Loaded!');");        
    }   
}   

希望我正確理解你的問題,

您可以使用此函數Page.RegisterStartupScript Method,它將使您的JavaScript代碼在頁面再次加載后運行。

有關msdn的詳細信息和示例,請訪問http://msdn.microsoft.com/zh-cn/library/system.web.ui.page.registerstartupscript.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM