关于自定义控件中的复合控件 的 postback的问题

baitianhai 2003-01-13 01:26:35
其中的inputbox值更改了,如何在postback之后修改那?
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Text;
using System.Collections.Specialized;

namespace WebControl1
{
public class Test : System.Web.UI.WebControls.WebControl,IPostBackDataHandler
{
public string[] Array;
protected override void Render(HtmlTextWriter output)
{
if(Array!=null)
{
output.Write("<table>");
for(int i=0;i<Array.Length;i++)
{
output.Write("<tr><td>");
output.Write("<input type=\"text\" name=\"" + this.UniqueID + ":" + i + "\" value=\"" + Array[i] + "\">");
output.Write("</td></tr>");
}
output.Write("</table>");
}
}

protected override object SaveViewState()
{
return (object)Array;
}

protected override void LoadViewState(object state)
{
Array=(string[])state;
}

public bool LoadPostData(string postDataKey,NameValueCollection postData)
{
for(int i=0;i<Array.Length;i++)
{
Array[i]=(string)postData[this.UniqueID + ":" + i];

}
TrackViewState();
return false;
}

public void RaisePostDataChangedEvent()
{

}
}
}
...全文
125 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
baitianhai 2003-01-13
  • 打赏
  • 举报
回复
我明白了
tb.ID = this.UniqueID + ":" + i; 不应该这样写,应该是 tb.ID = this.UniqueID;
谢了
layershow 2003-01-13
  • 打赏
  • 举报
回复
好多的代码啊~~~看不下去了 @_@
baitianhai 2003-01-13
  • 打赏
  • 举报
回复
what should I do?????????????????????????
baitianhai 2003-01-13
  • 打赏
  • 举报
回复
我修改成这样,可是不行,postback后 值没有改变
我想应该是SaveViewState和LoadViewState的问题
当我把他们去掉的时候
提示
[InvalidCastException: 指定的转换无效。]
System.Web.UI.WebControls.WebControl.LoadViewState(Object savedState) +24
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +125
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +311
System.Web.UI.Control.LoadViewStateRecursive(Object savedState) +311
System.Web.UI.Page.LoadPageViewState() +182
System.Web.UI.Page.Proce
下面是代码
using System;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Text;
using System.Collections.Specialized;

namespace WebControl1
{
public class Test : System.Web.UI.WebControls.WebControl,IPostBackDataHandler
{
public string[] ArrayValue
{
get
{
return (String[])ViewState["ArrayValue"];
}

set
{
ViewState["ArrayValue"]=value;
}
}
protected override void CreateChildControls()
{
if(ArrayValue!=null)
{
Table t = new Table();
for(int i=0;i<ArrayValue.Length;i++)
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();
TextBox tb = new TextBox();
tb.ID = this.UniqueID + ":" + i;
tb.Text = ArrayValue[i] ;
tc.Controls.Add(tb);
tr.Cells.Add(tc);
t.Rows.Add(tr);
}
this.Controls.Add((t));
}
}

protected override object SaveViewState()
{
return (object)ArrayValue;
}

protected override void LoadViewState(object state)
{
ArrayValue=(string[])state;
}

public bool LoadPostData(string postDataKey,NameValueCollection postData)
{
string[] ArrayTemp=new string[ArrayValue.Length];

for(int i=0;i<ArrayValue.Length;i++)
{
ArrayTemp[i]=(string)postData[this.UniqueID + ":" + i];

}

ArrayValue=ArrayTemp;
return false;

}

public void RaisePostDataChangedEvent()
{

}
}
}
调用代码
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
if(!IsPostBack)
{
string[] a=new string[2];
a[0]="a";
a[1]="b";
Test1.ArrayValue=a;
}
}
请问是怎么回事?
saucer 2003-01-13
  • 打赏
  • 举报
回复
1. using keyword "Array" as a variable name is a very bad style

2. you should not use Render to create controls through text output, you should override CreateChildControls()


protected override void CreateChildControls()
{
Table t = new Table();
for (......)
{
TableRow tr = new TableRow();
TableCell tc = new TableCell();

TextBox tb = new TextBox();
//set its properties
tc.Controls.Add(tb);

tr.Cells.Add(tc);
t.Rows.Add(tr);



}
this.Controls.Add((t));
}

3. see some discussions here:

http://expert.csdn.net/Expert/topic/1204/1204836.xml?temp=.559643
http://expert.csdn.net/Expert/topic/1204/1204125.xml?temp=.373913
juqiang 2003-01-13
  • 打赏
  • 举报
回复
把你的load和save两个方法,用ViewState或者Session来取,array设置为public是没有用的,因为asp.net是无状态的

62,244

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧