這工作,但它是正確的方式來做到這一點?在自定義服務器控件中維護狀態的正確方法是什麼?
我有一個自定義的服務器控件,它上面有一個[input]框。我希望它能模仿ASP.NET TextBox,但不完全。當文本框呈現時,我有一個JavaScript,允許用戶選擇然後放置在該輸入框中的值。
我在控件上有一個公共文本屬性。在獲取/設置我得到/設置控件的視圖狀態 - 該部分很容易,但是當通過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 + ">.....
}
感謝
這工作就像一個冠軍,尤其是,存在一個值我不得不設置檢查項目是髒: 如果(!((IDictionary)_viewstate).Contains(「CustomValue」)|| _viewstate.IsItemDirty(「CustomValue」)) – schmoopy 2008-10-21 15:44:29