好了喬恩,視圖狀態的問題,第一:
,如果有任何一種,因爲2.0的內部代碼的變化,但這裏的如何我處理得到一個幾年前擺脫視圖狀態的我沒有檢查。實際上,隱藏的字段在HtmlForm內部是硬編碼的,所以你應該派生你的新字段,並進入你自己的調用。請注意,您也可以留下__EVENTTARGET和__EVENTTARGET,如果你堅持老式輸入控件(我猜你會想,因爲它可以幫助無法在客戶端上需要JS):
protected override void RenderChildren(System.Web.UI.HtmlTextWriter writer)
{
System.Web.UI.Page page = this.Page;
if (page != null)
{
onFormRender.Invoke(page, null);
writer.Write("<div><input type=\"hidden\" name=\"__eventtarget\" id=\"__eventtarget\" value=\"\" /><input type=\"hidden\" name=\"__eventargument\" id=\"__eventargument\" value=\"\" /></div>");
}
ICollection controls = (this.Controls as ICollection);
renderChildrenInternal.Invoke(this, new object[] {writer, controls});
if (page != null)
onFormPostRender.Invoke(page, null);
}
所以,你得到的3靜態的MethodInfo的,並呼籲他們出跳過ViewState的一部分了;)
static MethodInfo onFormRender;
static MethodInfo renderChildrenInternal;
static MethodInfo onFormPostRender;
,這裏是你的窗體的類型構造:
static Form()
{
Type aspNetPageType = typeof(System.Web.UI.Page);
onFormRender = aspNetPageType.GetMethod("OnFormRender", BindingFlags.Instance | BindingFlags.NonPublic);
renderChildrenInternal = typeof(System.Web.UI.Control).GetMethod("RenderChildrenInternal", BindingFlags.Instance | BindingFlags.NonPublic);
onFormPostRender = aspNetPageType.GetMethod("OnFormPostRender", BindingFlags.Instance | BindingFlags.NonPublic);
}
如果我得到你的問題的權利,Y歐也想不使用POST作爲表單的動作所以這裏你會怎麼做:
protected override void RenderAttributes(System.Web.UI.HtmlTextWriter writer)
{
writer.WriteAttribute("method", "get");
base.Attributes.Remove("method");
// the rest of it...
}
我想這是相當多了。讓我知道事情的後續。
編輯:我忘了頁面視圖狀態的方法:
所以,你的自定義表單:HtmlForm控件得到了全新的抽象(或沒有)頁:System.Web.UI.Page:P
protected override sealed object SaveViewState()
{
return null;
}
protected override sealed void SavePageStateToPersistenceMedium(object state)
{
}
protected override sealed void LoadViewState(object savedState)
{
}
protected override sealed object LoadPageStateFromPersistenceMedium()
{
return null;
}
在這種情況下,我會密封方法因爲你不能密封頁面(即使它不是抽象的Scott Guthrie會將其包裝成另一個:P),但是你可以密封你的表單。
「提示如何強大的墮落」 - 我們都是無知的,只是不同的事情。我只是最近纔開始參加這個活動,但我更欽佩這個問題。你顯然還在思考和學習。榮譽給你。 – duffymo 2009-01-10 16:54:06
我不認爲我會注意那些放棄學習的人:) – 2009-01-10 17:05:16
在一般情況下是正確的。計算機科學非常真實。 – 2009-01-10 17:14:17