UpdatePanel 자바 script 스 크 립 트 를 실행 하 는 방법 코드 추가

1.프 리 디 스 플레이 데 이 터 는 변경 할 수 없습니다.1.프 리 디 스 플레이 데 이 터 는 변경 할 수 없습니다.이전에 언급 했 을 수 있 습 니 다.여기 서 demo 를 보고 컨트롤[DefaultProperty("Text")][ToolboxData("<{0}:JSControl runat=server></{0}:JsControl>")] public class JsControl : WebControl { [Bindable(true)] [Category("Appearance")] [DefaultValue("")] [Localizable(true)]  public string Text  {  get  {  String s = (String)ViewState["Text"];   return ((s == null) ? String.Empty : s);   }   set  {   ViewState["Text"] = value;    } }  protected override void OnPreRender(EventArgs e)  {  Text = "hello,you can't change me";   base.OnPreRender(e);   }  protected override void RenderContents(HtmlTextWriter output)  {  output.Write(Text);  }}aspx 페이지 보호 void Button1_Click(object sender, EventArgs e) { JsControl1.Text = "I want to change the Text property";  } 속성 을 변경 하지 않 은 것 을 발견 할 수 있 습 니 다.이것 은 컨트롤 의 수명 주기 실행 과 관련 이 있 습 니 다.왜 이것 을 말 해 야 합 니까?컨트롤 의 대부분 스 크 립 트 가 미리 보 여 주 는 것 에 등록 되 어 있 기 때 문 입 니 다.  이것 은 무슨 문제 가 있 습 니까? 그 자체 의 생각 이 좋 습 니 다.스 크 립 트 는 이 이벤트(OnPreRender)에 등록 되 어 있 습 니 다.스 크 립 트 자원 을 이전(컨트롤 중간)에 등록 하고 스 크 립 트 를 마지막 으로 초기 화 합 니 다.이것 은 자바 script 의 사용 원칙 에 부합 합 니 다.스 크 립 트 를 먼저 가 져 온 다음 에 태그 가 있 습 니 다.초기 화 된 스 크 립 트 는 탭 뒤에 두 어야 합 니 다.2.UpdatePanel 이 일 으 킨 문제 의 경우 서버 가 리 셋 을 제출 하면 가능 합 니 다.주요 문 제 는 ajax 로 등록 스 크 립 트 를 새로 고치 지 않 는 것 입 니 다.다음은 asp.net 2.0 에 내 장 된 treeview 컨트롤 을 살 펴 보 겠 습 니 다.컨트롤 을 끌 어 당 겨 서 생 성 된 html 코드 를 보 겠 습 니 다.당신 은 이미 많은 스 크 립 트 등록 과 초기 화 를 보 았 습 니 다.우 리 는 UpdatePanel 이 무엇 을 할 수 있 는 지 테스트 해 보 겠 습 니 다.우 리 는 그 속성 Visible 을 False 에서 True 로 설정 하여 FireBug 의 위력 을 빌려 UpdatePanel 이 리 셋 없 이 우리 에 게 어떤 실 수 를 했 는 지 살 펴 보 겠 습 니 다.여러분 도 이 상황 을 만 났 을 것 입 니 다.매우 정상 적 입 니 다.UpdatePanel 은 스 크 립 트 를 등록 하지 않 았 고 초기 화 되 지 않 았 습 니 다.정상 적 인 현상 에 속 합 니 다.UpdatePanel 은 용기 안에 있 는 것 만 관리 하고 다른 것 은 관리 하지 않 습 니 다.3.해결 방법 은 TreeView 컨트롤 을 해결 해 야 합 니 다.생각 나 지 않 습 니 다.이 컨트롤 은 asp.net 에 있 는 것 입 니 다. ajax 모드 에 서 는 망 한 셈 입 니 다.asp.net 에 맞 추기 위해 서 입 니 다. ajax 프레임 워 크 의 활용,우 리 는 UpdatePanel 이 업데이트 범 위 를 새로 고치 지 않 았 음 을 알 아야 합 니 다.우리 가 컨트롤 을 정의 할 때 주의해 야 합 니 다.1.컨트롤 자체 탭 2.컨트롤 내부 3.UpdatePanel 용기 내부 에서 UpdatePanel 을 사용 하여 데 이 터 를 업데이트 한 후에 클 라 이언 트 이 벤트 를 촉발 하려 면 다음 과 같은 방안 이 있 습 니 다.1.기 존 컨트롤 속성 을 변경 합 니 다.예 를 들 어 Button 1.Attributes["onmouseover"] = "alert('hello')";  2.보 여 주 는 과정 에서 스 크 립 트 초기 화 첫 번 째 방법 은 간단하게 사용 할 수 있 습 니 다.복잡 하면 안 됩 니 다.우 리 는 스 크 립 트 를 컨트롤 과 결합 하여 사용 해 야 합 니 다.우 리 는 미리 보 여 주 는 과정 에서 스 크 립 트 를 등록 하지 않 고 보 여 주 는 과정 에서 이 루어 집 니 다(즉,RederContent 방법).우 리 는 스 크 립 트 자원 이 앞 에 있 고 초기 화 된 후에컨트롤 이 중간 에 있다 는 원칙 만 있 으 면 됩 니 다. override void RenderContents(HtmlTextWriter output) { output.Write("<script src=\"xxxx.js\"></script>");  output.Write(Text);  output.Write("<script>alert('hello')</script>");  } 4.몇 개의 오류 1.검증 컨트롤 은 ajax 프레임 워 크 에서 잘 사용 할 수 있 습 니 다.사실은 스 크 립 트 를 불 러 왔 습 니 다.그렇지 않 으 면 끊 을 수도 있 습 니 다. void Button1_Click(object sender, EventArgs e) { Label1.Text = "alert('hello')";  } 결 과 는 아무 일 도 일어나 지 않 았 습 니 다.window.onload 사건 은 이미 지 났 습 니 다.새로 고침 을 하지 않 으 면 아무 도 터치 하지 않 습 니 다.누가 촉발 합 니까?마이크로소프트 가 우 리 를 도와 준 비 를 다 했다.당신 이 원 하 는 것 은 아마 이것 입 니 다.데이터 업데이트 전후 에 모두 이벤트 가 발생 했 습 니 다.우 리 는 이 두 사건 을 둘러싸 고 컨트롤 을 위해 뭔 가 를 할 수 있다.이 상 태 는 데 이 터 를 가 져 온 후 바로 촉발 하 는 수요 에 적합 하 다.Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(BeginRequestHandler);   Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequestHandler);   function BeginRequestHandler(sender, args)  {  var elem = args.get_postBackElement();   ActivateAlertDiv('visible', 'AlertDiv', elem.value + ' processing');   }  function EndRequestHandler(sender, args)  {  ActivateAlertDiv('hidden', 'AlertDiv', '');   }  function ActivateAlertDiv(visstring, elem, msg)  {  var adiv = $get(elem);   adiv.style.visibility = visstring;   adiv.innerHTML = msg;  }다른 경우 에 도 컨트롤 속성 을 변경 할 수 있 습 니 다.예 를 들 어 onclick 이벤트 같은 것 은 모두 5.다른 해결 방법 은 이 방법 이 아주 좋 지만 사용 하기에 비교적 시원 합 니 다.UpdatePanel 이 스 크 립 트 데 이 터 를 가 져 올 수 없 는 이 유 는 가 져 올 범위 가 부족 하기 때 문 입 니 다...이 어 데 이 터 를 새로 고침 하지 않 았 지만 되 찾 은 데 이 터 는 Postback 에서 돌아 온 데이터 와 같다 는 생각 이다.어떤 사람 이 성능 을 비교적 소모 할 것 이 라 고 말 할 수 있 는데,그것 은 모두 상대 적 인 것 이다.그래도 좋 은 생각 이에 요.Telerik 회사 의 RadAjaxPanel 은 이렇게 이 루어 졌 습 니 다.관심 있 는 것 은 다운로드 해서 사용 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기