2010-04-20 2 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

+0

나는 내 질문을 다시 말했습니다. 나는 그것의 명확한 지금 희망한다. – scatman

+0

자바 스크립트 함수를 호출하면 ... alert (''); – scatman

답변

2

HTML 엘리먼트 "입력"에

추가 정보 및 예는로드 이벤트가 없다. '본문', 'img'및 'window'가 있습니다. 다른 사람이있을 수 있습니다.

사용자 정의 입력 (텍스트 상자)에 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

+0

실제로 내가하려는 것은 MyTexbox에 JQuery 달력을 첨부하는 것입니다. 나는 당신이 말한 것과 똑같이했다. (CSS 클래스를 추가하면 ....) 모든 것이 잘 돌아갔다. 그런 다음 페이지에서 특정 텍스트 상자의 일정을 업데이트해야했습니다 (일부 달력의 경우 분 및 최대 날짜 또는 문화를 설정하는 것과 같음). 왜냐하면 그들은 모두 같은 CSS를 가지고 있기 때문에 이것은 모든 textboxes에 사용할 수있는 모든 캘린더의 값을 업데이 트하기 때문에 나는 이것을 할 수 없습니다. 이것이 내가 textbox를 확장하고 onLoad 이벤트를 오버라이드하여 각 texbox에 대한 캘린더를로드하는 이유라고 생각합니다. – scatman

+0

내 질문에 기쁜 답변을드립니다. 나는 최근에 그 중 하나를 만들었습니다. 위 예제의 사용자 정의 웹 컨트롤을 사용하면 jQueryUI 날짜 선택 옵션과 날짜 형식 문자열을 설정할 수도 있습니다. 희망이 도움이됩니다. – pmawhinney

0

자바 스크립트로 OnLoad 이벤트 (C#)에 과부하를 걸겠습니까? 나는 네가 할 수 있다고 생각하지 않는다. 또는 OnLoad 이벤트에서 일부 자바 스크립트를 렌더링 하시겠습니까? 당신이 바로, 텍스트 상자의 onload 이벤트에 자바 스크립트 함수를 해고하려면 ... 난 당신이 혼란 생각

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

아니요 나는이 메서드를 재정의하기 위해 C#을 사용하고 있지만이 메서드 내부에서 자바 스크립트 함수를 호출하려고합니다. – scatman

+0

http://stackoverflow.com/questions/1577859/asp-net-javascript-object-component-for-composite-control SO에서이 부분을 확인하십시오. 나는 그것이 당신을 도울 수 있다고 생각합니다. –

0

이 시도? 그런 다음 서버 측에서 수행하지 말고 클라이언트 측에서 수행해야합니다. 즉, onload 이벤트를 재정의 할 필요가 없습니다. 이 속성을 생성자에 추가하면 트릭을 수행해야합니다! ;) 페드로 MM에 대한 응답을 바탕으로

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

:

+0

모든 페이지의 모든 텍스트 상자에서이 작업을 수행해야하므로 모든 텍스트 상자의 모든 페이지에서 txtBox.Attributes.Add()를 호출하는 것이 아니라 OnLoad 이벤트를 재정의하는 것이 훨씬 더 편리하다고 생각했습니다 – scatman

+0

시도해 보셨나요 아직? – pmmaga

+0

네,이 작업을 할 것이라고 확신하지만, 당신은 하나의 텍스트 박스를 지정하고 있습니다. 내가 말했듯이, 나는 프로젝트에서 많은 텍스트 박스를 가지고 있으며 나는 모든 텍스트 박스에 Attribure를 설정할 수 없다. 하나의 단일 attribute.this에있는 모든 현재 texboxes (및 미래의 사람)에 대한 속성을 설정하는 방법이 필요합니다 내가 왜 텍스트 상자 컨트롤을 확장하고 있습니다 .... – scatman

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

나는 이미 이것을 시도했습니다. 그러나 그것은 일하지 않았다!! – scatman

1

용의자 당신이 원하는 것은 이것이다 :

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

의 OnLoad (EventArgs입니다 E)는 서버의 이벤트입니다. 웹 페이지의 JavaScript OnLoad 이벤트와 관련이 없습니다.

+0

작동하지 않았습니다. 나는 그것을 수행하여 테스트 : Attributes.Add ("OnLoad", "alert ('ok!');"); MyTextBox 컨트롤을 포함하고 경고가 발생하지 않는 페이지를 시작하는 중 ... – scatman

+0

내 새로운 대답보기 : "html 요소 'input'에로드 이벤트가 없습니다." – pmawhinney

관련 문제