[英]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.