문제

이것은 작동하지만 적절한 방법입니까 ???

입력] 상자가있는 사용자 정의 서버 컨트롤이 있습니다. ASP.NET TextBox를 모방하기를 원하지만 완전히는 아닙니다. 텍스트 상자가 렌더링되면 사용자가 해당 입력 상자에 배치되는 값을 선택할 수있는 JavaScript가 있습니다.

통제에 대한 공개 텍스트 속성이 있습니다. get/set에서 컨트롤의 뷰 스테이트를 얻거나 설정하십시오 - 해당 부분은 쉽지만 컨트롤이 JavaScript를 통해 채워질 때 텍스트가 실제로 호출되지 않으며 JavaScript를 사용 하여이 노출 된 속성을 설정하는 적절한 방법은 무엇입니까? (또는 사용자가 상자에 유형을 입력하더라도)?

편집 : ONINIT에서는 양식 값에 도달하여 상태가 유지되도록합니다.

    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);

        if (HttpContext.Current.Request.Form["MyInputBoxValue"] != "")
        {
            ViewState["MyInputBoxValue"] 
               = HttpContext.Current.Request.Form["MyInputBoxValue"];
        }
    }

그런 다음 htmltextWrite에서 실제로 값을 다시 제자리에 올리려면 다음을 수행합니다.

protected override void RenderContents(HtmlTextWriter output)
{

        // There is an input control here and i set its value property
        // like this using the Text internal defined.
        output.Write("<input value=" + Text + ">.....

}

감사해요

도움이 되었습니까?

해결책

istateManager를 사용하는 것이 가장 잘 작동합니다.

예를 들어:

partial class MyControl : System.Web.UI.UserControl, IStateManager
{
    [Serializable()]
    protected struct MyControlState
    {
        public bool someValue;
        public string name;
    }

    protected MyControlState state;

    public bool someValue {
        get { return state.someValue; }
        set { state.someValue = value; }
    }

    public bool IsTrackingViewState {
        get { return true; }
    }

    protected override void LoadViewState(object state)
    {
        if ((state != null) && state is MyControlState) {
            this.state = state;
        }
    }

    protected override object SaveViewState()
    {
        return state;
    }

    protected override void TrackViewState()
    {
        base.TrackViewState();
    }
}

getDefaultState ()는 일부 제정신 기본값을 새 상태 구조물에로드합니다. State는 페이지의 뷰 스테이트에서 추적되며 ASP는 귀하를 위해 IN/OUT을 가져옵니다.

(위의 코드는 VB에서 포팅되고 확인되지 않았으므로 오류가 발생하지 않았지만 어쨌든 지점을 가져야합니다)

다른 팁

Postback에서 상태를 유지 해야하는 경우 사용자가 클라이언트 측에서 귀하의 컨트롤을 사용한 작업을 기록하고 나중에 서버에서 서버 제어를 변경하여 서버 컨트롤을 업데이트하거나 클라이언트의 변경 사항을 다시 작성해야합니다. 페이지가 새로 고침 될 때 측면.

흠 기존 ASP.NET 지속성을 사용할 수 있는지 궁금합니다 ... 가장 기본적인 후 상태 지속 제어에서 상속을 시도하십시오 (ASP : Hidden을 생각하고 있습니다). 그런 다음 렌더를 무시하고 원하는 모든 재즈를 추가하십시오.

그것이 작동하는지 알려주세요. 그러면 테스트 할 필요가 없습니다 :)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top