我在GridView中的 protected void gvDepartment_PreRender(object sender, EventArgs e)
{
for (Int32 i = 0; i <= gvDepartment.Rows.Count - 1; i++)
{
GridViewRow row = gvDepartment.Rows[i];
Button btnDelete = (Button)row.FindControl("btnDelete");
System.Web.UI.HtmlControls.HtmlAnchor btnPrompt = new System.Web.UI.HtmlControls.HtmlAnchor();
btnPrompt.EnableViewState = false;
btnPrompt.InnerHtml = btnDelete.Text;
btnPrompt.HRef = "javascript:";
btnDelete.Parent.Controls.AddAt(btnDelete.Parent.Controls.IndexOf(btnDelete), btnPrompt);
}
}然后在页面中有提交控件点击的时候就提示
未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配
在网上找了一些方法都不行
比如说:
解决:在页面的 Page 项添加 EnableViewState="false" 即可,是不是很简单啊。
----------------------
但这样的话:这种办法,不好啊,这样所有的控件状态都保存不了啦那要怎么办呢谢谢
{
for (Int32 i = 0; i <= gvDepartment.Rows.Count - 1; i++)
{
GridViewRow row = gvDepartment.Rows[i];
Button btnDelete = (Button)row.FindControl("btnDelete");
System.Web.UI.HtmlControls.HtmlAnchor btnPrompt = new System.Web.UI.HtmlControls.HtmlAnchor();
btnPrompt.EnableViewState = false;
btnPrompt.InnerHtml = btnDelete.Text;
btnPrompt.HRef = "javascript:";
btnDelete.Parent.Controls.AddAt(btnDelete.Parent.Controls.IndexOf(btnDelete), btnPrompt);
}
}然后在页面中有提交控件点击的时候就提示
未能加载视图状态。正在向其中加载视图状态的控件树必须与前一请求期间用于保存视图状态的控件树相匹配
在网上找了一些方法都不行
比如说:
解决:在页面的 Page 项添加 EnableViewState="false" 即可,是不是很简单啊。
----------------------
但这样的话:这种办法,不好啊,这样所有的控件状态都保存不了啦那要怎么办呢谢谢
--------------------------------------------------------------------你可以设置GridView的EnableViewState="false" 或者设置btnPrompt.EnableViewState = true;
你可以设置GridView的EnableViewState="false" 或者设置btnPrompt.EnableViewState = true;
---------------------------------
这种方式不行,应该我要保持我的gvDepartment状态设置btnPrompt.EnableViewState = true;
还是一样的出错提示
谢谢 protected void gvDepartment_PreRender(object sender, EventArgs e)
{
for (Int32 i = 0; i <= gvDepartment.Rows.Count - 1; i++)
{
GridViewRow row = gvDepartment.Rows[i];
Button btnDelete = (Button)row.FindControl("btnDelete");
System.Web.UI.HtmlControls.HtmlAnchor btnPrompt = new System.Web.UI.HtmlControls.HtmlAnchor();
btnPrompt.EnableViewState = true; //这里已经设置
btnPrompt.InnerHtml = btnDelete.Text;
btnPrompt.HRef = "javascript:";
btnDelete.Parent.Controls.AddAt(btnDelete.Parent.Controls.IndexOf(btnDelete), btnPrompt);
}
}
的AddAt。在你的btnDelete前面放一个PlaceHolder,例如ID为myContainer,然后把它写为类似于:
var cc=(PlaceHolder)row.FindControl("btnDelete");
cc.Controls.Add(btnPrompt);
cc.Controls.Add(btnPrompt);
HtmlForm
- TextBox
- Button在PostBack之后,变成了这个样子:
HtmlForm
- Button
- TextBox这时候ASP.NET会尝试把原本TextBox的ViewState塞进Button,发现塞不进,属性完全对不上,就会出这个错误。你需要解决的话,打开Trace,然后看看Trace输出的控件树是什么地方不同了,再看看你的代码,估计就能看出哪里不小心破坏控件树了。
我要根据他里面行的控件的某一个属性来别加某一个控件
要添加的控件是不定的
所以我就想动态来添加
而如果要事先加好的话我要加好多个控件啊上面应该怎么办呢
谢谢
为你在C#中new出来的所有控件加上ID属性。我上面已经说过问题所在了,就是同样的ID不同的控件。由于你没有对控件ID赋值,所以ID是自动编号的,这次的ctrl00是TextBox,下次的ctrl00是Button,ASP.NET就一定报错。只要你用ID区分了控件,自然不会出这样的问题。