用FindControl找不到控件,用Request.Form获取不到值 [急....]

gongsun 2008-07-10 03:44:00
我是用母页版的。

简单的说:页面中在一个 textbox1,一个button1 和一个button2

当在textbox1中输入一个数 :例如输入了 4。

点击 button1

页面中就会出现 4个textbox,这4个textbox是在一个原本隐藏的 Panel控件中,并同时显示。

4个textbox的 ID 会被循环指定为 txtAdd0 txtAdd1 txtAdd2 txtAdd3

现在当我在这4个textbox中添加数据后,点击button2提交的时候

发现并不能得到数据。


int thenum = int.Parse(textbox1.Text);
string str = "";
for (int i = 0; i < thenum; i++)
{
TextBox thistext = new TextBox();
//不论是用下面的找页面ID
thistext = (TextBox)Page.Form.FindControl("txtAdd" + i.ToString());
//还是直接获取值
//string gettext = Request.Form["txtAdd" + i.ToString()];
//thistext 或 gettext 都是空的...
if (thistext.Text == "")
{
Response.Write("<script>alert('没有添满!')</script>");
return;
}
else
{
str += thistext.Text + "|";
}
}



不知道这和使用母页版有没有什么关系?

急啊..........
...全文
752 63 打赏 收藏 转发到动态 举报
写回复
用AI写文章
63 条回复
切换为时间正序
请发表友善的回复…
发表回复
1010骑士 2012-03-05
  • 打赏
  • 举报
回复
你加个 name 上去,就可以读到了
leer168 2008-07-15
  • 打赏
  • 举报
回复
没看懂 什么跟什么啊
gongsun 2008-07-13
  • 打赏
  • 举报
回复
[Quote=引用 58 楼 tootto 的回复:]
引用 56 楼 gongsun 的回复:
引用 54 楼 tootto 的回复:
有,Master page的life cycle和普通页面是一样的,普通页面有的它都有。而且,很有趣的一件事是,如果母版页和子页都设定的Page_Load事件,
你会发现子页的Page_Load事件先于Master Page执行。


兄弟,你是让我在母页版的后台代码中写 Page_Init事件?

我上面可能说的有问题,我想问:引用母页版后的子页面有Page_Init事件吗?

不能自动生成吧???

[/Quote]

使用Page_Init事件,但当页面加载的时候还是不可能知道生成几个textbox啊。

我不可能在Page_Init中把 将生成的textbox写死成4啊...

明白?
gongsun 2008-07-12
  • 打赏
  • 举报
回复
[Quote=引用 55 楼 bollton 的回复:]
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TextBoxAutoAdd.aspx.cs" Inherits="TextBoxAutoAdd" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页 </title>
<script language="javascript">
function DataAdd…
[/Quote]

不行...试了,真的不行...
gongsun 2008-07-12
  • 打赏
  • 举报
回复
[Quote=引用 58 楼 tootto 的回复:]
引用母页版后的子页面有Page_Init事件!!!

这段代码:

protected void Page_Init(object sender, EventArgs e)
{
TextBox[] textBoxList = new TextBox[4];
for (int index = 0; index < 4; index++)
{
textBoxList[index] = new TextBox();
textBoxList[index].ID = "textBoxaa" + index.ToString();
textBoxList[index].Visible = false;
Session["textBoxaa" + index.ToString()] = textBoxList[index];
Panel1.Controls.Add(textBoxList[index]);
}
}

....
....
....

是写在子页里的!!
[/Quote]

我来试试,这个事件竟然可以不用自动生成...?

研究研究..
xlong224 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sheng9hhd 的回复:]
调试跟踪一下PanelOptionData.controls看看都是什么!是不是有你的那4个TextBox
[/Quote]
pdsnet 2008-07-11
  • 打赏
  • 举报
回复
学习中.......
gongsun 2008-07-11
  • 打赏
  • 举报
回复
大家帮我想想啊.........
tootto 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 56 楼 gongsun 的回复:]
引用 54 楼 tootto 的回复:
有,Master page的life cycle和普通页面是一样的,普通页面有的它都有。而且,很有趣的一件事是,如果母版页和子页都设定的Page_Load事件,
你会发现子页的Page_Load事件先于Master Page执行。


兄弟,你是让我在母页版的后台代码中写 Page_Init事件?

我上面可能说的有问题,我想问:引用母页版后的子页面有Page_Init事件吗?

不能自动生成吧???

如果在母页版的后台写代码的话,那…
[/Quote]

引用母页版后的子页面Page_Init事件!!!

这段代码:

protected void Page_Init(object sender, EventArgs e)
{
TextBox[] textBoxList = new TextBox[4];
for (int index = 0; index < 4; index++)
{
textBoxList[index] = new TextBox();
textBoxList[index].ID = "textBoxaa" + index.ToString();
textBoxList[index].Visible = false;
Session["textBoxaa" + index.ToString()] = textBoxList[index];
Panel1.Controls.Add(textBoxList[index]);
}
}

....
....
....

是写在子页里的!!
gongsun 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 55 楼 bollton 的回复:]
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TextBoxAutoAdd.aspx.cs" Inherits="TextBoxAutoAdd" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页 </title>
<script language="javascript">
function DataAdd…
[/Quote]

兄弟你的方法,我也来研究研究...
gongsun 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 tootto 的回复:]
有,Master page的life cycle和普通页面是一样的,普通页面有的它都有。而且,很有趣的一件事是,如果母版页和子页都设定的Page_Load事件,
你会发现子页的Page_Load事件先于Master Page执行。
[/Quote]

兄弟,你是让我在母页版的后台代码中写 Page_Init事件?

我上面可能说的有问题,我想问:引用母页版后的子页面有Page_Init事件吗?

不能自动生成吧???

如果在母页版的后台写代码的话,那个 4 ,那个Panel....

不可能吧...
bollton 2008-07-11
  • 打赏
  • 举报
回复
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="TextBoxAutoAdd.aspx.cs" Inherits="TextBoxAutoAdd" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
<script language="javascript">
function DataAdd(i)
{
var BB="txtAdd"+i;
if(document.all(BB).value!="")
{
document.form1.HiddenField1.value+=document.all(BB).value+"#";
}
}
</script>
</head>
<body bottommargin="0" leftmargin="0" rightmargin="0" topmargin="0">
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<asp:Button ID="Button2" runat="server" Text="Button" OnClick="Button2_Click" /><br />
<asp:Panel ID="Panel1" runat="server" Height="50px" Width="125px">
</asp:Panel>
<br />
<asp:HiddenField ID="HiddenField1" runat="server" />

</div>
</form>
</body>
</html>


c# code:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class TextBoxAutoAdd : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{
int Num = Int32.Parse(TextBox1.Text);
DataBindToPanel(Num);
}
protected void DataBindToPanel(int Num)
{
TextBox[] TextBoxList = new TextBox[Num];
for (int index = 0; index < Num; index++)
{
TextBoxList[index] = new TextBox();
TextBoxList[index].ID = "txtAdd" + index.ToString();
TextBoxList[index].Text = "myTextBox" + index.ToString();
TextBoxList[index].Attributes.Add("onBlur", "DataAdd("+index.ToString()+")");
Panel1.Controls.Add(TextBoxList[index]);
}
}
protected void Button2_Click(object sender, EventArgs e)
{
string aa = HiddenField1.Value != null ? HiddenField1.Value : "";
Response.Write("-----------------------------------------------------<br>" + aa);
if (!String.IsNullOrEmpty(HiddenField1.Value))
{
HiddenField1.Value = "";
}
}
}
tootto 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 42 楼 gongsun 的回复:]
引用 40 楼 tootto 的回复:
放入Page_Init事件最主要的原因是要保存动态TextBox内的值,需要ViewState,而ViewState的载入是在Page_Load事件之间发生的。

如果是动态的button,放到Page_Load里就没关系了(TextBox也可以,但无法保存它里面的text)。


弱弱的问一句:


引用了 母页版的页面有 Page_Init事件吗?
[/Quote]

有,Master page的life cycle和普通页面是一样的,普通页面有的它都有。而且,很有趣的一件事是,如果母版页和子页都设定的Page_Load事件,
你会发现子页的Page_Load事件先于Master Page执行。
DoPeter 2008-07-11
  • 打赏
  • 举报
回复
为什么不用JS,动态生成4个BUTTON为什么要回发一次服务器?
evjen 2008-07-11
  • 打赏
  • 举报
回复
如果你想找模板页里面的控件必须加上模板页在客户端生成的ID
twin21cn 2008-07-11
  • 打赏
  • 举报
回复
学习中……
zld_baggio 2008-07-11
  • 打赏
  • 举报
回复
如果button2用的是是服务器端控件的话注意你的page_load事件。
XJQ_1 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 wwd252 的回复:]
生成HTML的时候 ,你查看这个TextBox的ID,然后用这个ID找他 就Ok 了
[/Quote]

生成HTML 的时候,找出这四 个ID 看看吧
gongsun 2008-07-11
  • 打赏
  • 举报
回复
[Quote=引用 47 楼 wwd252 的回复:]
生成HTML的时候 ,你查看这个TextBox的ID,然后用这个ID找他 就Ok 了
[/Quote]

我无语了...有看过我问的吗?
wwd252 2008-07-11
  • 打赏
  • 举报
回复
生成HTML的时候 ,你查看这个TextBox的ID,然后用这个ID找他 就Ok 了
加载更多回复(43)

61,817

社区成员

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

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

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

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