好了乔恩,视图状态的问题,第一:
,如果有任何一种,因为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