2012-05-14 4 views
2

Scriptcontrol의 클라이언트 및 서버 측에서 속성을 바인딩 할 수 있습니까? 자바 스크립트에서 속성을 설정할 때 변경 사항이 코드 뒤에 표시 될 수 있으며 코드에서 속성을 설정할 때, 변경 사항은 자바 스크립트에서 볼 수 있습니까? ...Scriptcontrol - 클라이언트 및 서버 속성을 바인딩하십시오.

편집을 내가 ScriptControl에 선언 속성을 설정할 때이 초기 설정되어 있지만 나중에 변경할 때 여전히 이전과 동일 -

나는 위와 같이 작업을 얻을 수 없다 나는 ASP.NET 응용 프로그램에서 긴 포스트 백을 위해 ProgressBar를 수행하려고합니다. 많은 옵션을 시도했지만 아무 것도 작동하지 않습니다 ... 코드에서 진행률 값을 설정하고 긴 태스크 포스트 백 중에 뷰에서 업데이트했습니다. ScriptControl에 대한

코드 : C 번호 :

public class ProgressBar : ScriptControl 
{ 
    private const string ProgressBarType = "ProgressBarNamespace.ProgressBar"; 
    public int Value { get; set; } 
    public int Maximum { get; set; } 

    protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors() 
    { 
     this.Value = 100; 
     this.Maximum = 90; 
     var descriptor = new ScriptControlDescriptor(ProgressBarType, this.ClientID); 

     descriptor.AddProperty("value", this.Value); 
     descriptor.AddProperty("maximum", this.Maximum); 

     yield return descriptor; 
    } 

    protected override IEnumerable<ScriptReference> GetScriptReferences() 
    { 
     yield return new ScriptReference("ProgressBar.cs.js");   
    } 
} 

자바 스크립트 :이 진행률 표시 줄을 구현할 수있는 방법을 주셔서 감사합니다

Type.registerNamespace("ProgressBarNamespace"); 

ProgressBarNamespace.ProgressBar = function(element) { 
    ProgressBarNamespace.ProgressBar.initializeBase(this, [element]); 
    this._value = 0; 
    this._maximum = 100; 
}; 

ProgressBarNamespace.ProgressBar.prototype = { 
    initialize: function() { 
     ProgressBarNamespace.ProgressBar.callBaseMethod(this, "initialize"); 
     this._element.Value = this._value; 
     this._element.Maximum = this._maximum; 

     this._element.show = function() { 
      alert(this.Value); 
     }; 
    }, 
    dispose: function() { 
     ProgressBarNamespace.ProgressBar.callBaseMethod(this, "dispose"); 
    }, 
    get_value: function() { 
     return this._value; 
    }, 
    set_value: function (value) { 
     if (this._value !== value) { 
      this._value = value; 
      this.raisePropertyChanged("value"); 
     } 
    }, 
    get_maximum: function() { 
     return this._maximum; 
    }, 
    set_maximum: function (value) { 
     if (this._maximum !== value) { 
      this._maximum = value; 
      this.raisePropertyChanged("maximum"); 
     } 
    } 
}; 

ProgressBarNamespace.ProgressBar.registerClass("ProgressBarNamespace.ProgressBar", Sys.UI.Control); 
if (typeof (Sys) !== "undefined") Sys.Application.notifyScriptLoaded(); 

... 개인적으로

+0

나는이 방법을 사용하는 것이 가장 우아한 방법이라고 생각합니다. 나는 궁금해. 너는 그걸 작동하도록 만들었 니? – julealgon

답변

1

, 나는 이렇게 종종 숨겨진 필드를 사용합니다. 숨겨진 필드는 안전하지 않으며 다른 가치가있을 수 있습니다. 실제로 값을 숨기지 않으므로 표시하지 마십시오.

ASPX 마크 업

<asp:HiddenField ID="hiddenRequest" runat="server" ClientIDMode="Static" /> 

ASPX.CS 코드 (jQuery로)

public string HiddenRequest 
    { 
     set 
     { 
      hiddenRequest.Value = value; 
     } 
     get 
     { 
      return hiddenRequest.Value; 
     } 
    } 

페이지 JAVASCRIPT

$('#hiddenRequest').val('MyResult'); 

이 방법 뒤에, 나는 하나 개의 변수를 사용하여 동일한 필드에 액세스 할 수 있습니다 따라서 클라이언트 측과 서버 측 모두에 액세스 할 수 있습니다.

+0

ScriptControl에서도 가능한지 확실하지 않습니다. 뷰 부분이 없으며 클래스 일뿐입니다. – mrzepa

+0

아마도 나는 당신의 질문에 대해 오해했습니다. 당신이하려고하는 것과 기대했던대로 작동하지 않는 것에 대한 코드 샘플을 제공해 줄 수 있습니까? – ericosg

+0

OK, 업데이트 된 질문보기, thx in advance;) – mrzepa