关于FindControl 在ASP.net 母版页中 如何通过ID查找控件 具体情况如下 20

学习asp.net不久根本的问题发现不了在前台因为是重复创建TextBox,所以通过代码将TextBox的ID改写过,这个页面也是在母版页中数据库连接没有问题当点击按钮触... 学习asp.net不久 根本的问题发现不了 在前台因为是重复创建TextBox,所以通过代码将TextBox的ID改写过,这个页面也是在母版页中 数据库连接没有问题 当点击按钮触发动作时,提示:
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------

未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。
行 41: string title = TextBoxSql.Text.ToString();
也就是说FindControl 并没有找到所需要的TextBox控件 希望能得到各位的指点 非常感谢

以下是.aspx前台代码
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<ul id="adminList" class="adminList" runat="server">

<%DataTable DT = DB.getdataset("select * from Table1 order by ID").Tables[0]; %>
<%foreach (DataRow n in DT.Rows)
{
if (n["managerID"] != "1000")
{%>
<li class="">
<span class="span4"><%TextBox2.Text = n["title"].ToString(); TextBox2.ID = "TextBox2" + n["ID"];%><asp:TextBox ID="TextBox2" runat="server" Width="80" MaxLength="5"></asp:TextBox></span>
</li>
<%}
} %>
</ul>
<asp:Button ID="Button1" runat="server" Text="Botton" onclick="Button1_Click1" />
</asp:Content>

以下是aspx.cs后台代码 主要是Button1_Click1按钮动作
protected void Button1_Click1(object sender, EventArgs e)
{
DataTable DT = DB.getdataset("select ID from manager order by ID").Tables[0];
foreach (DataRow n in DT.Rows)
{
if (n["ID"].ToString() != "1")
{
TextBox TextBoxSql = Master.FindControl("ContentPlaceHolder1").FindControl("TextBox2" + n["ID"]) as TextBox;
string title = TextBoxSql.Text.ToString();
//code
}
}
}
上面两个数据库的表名打错了 两表是一致的
展开
 我来答
q511579599
2011-04-28 · 超过36用户采纳过TA的回答
知道答主
回答量:98
采纳率:0%
帮助的人:118万
展开全部
Master.FindControl("ContentPlaceHolder1").FindControl("TextBox2" + n["ID"]) as TextBox;
这句建议将ContentPlaceHolder1改为Content 的ID。即:
Master.FindControl("Content2").FindControl("TextBox2" + n["ID"]) as TextBox;试下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
a273810907
2011-04-29 · 超过12用户采纳过TA的回答
知道答主
回答量:24
采纳率:0%
帮助的人:0
展开全部
此方法有两解
(TextBox)(Master.FindControl("ContentPlaceHolder1").FindControl("TextBox2" + n["ID"]) ).text
第二种就是 ContentPlaceHolder1 该控件中有会有个itemcommand事件
直接调用默认会生成一个e 参数。
使用e.FindControl("TextBox2" + n["ID"]) ).text
追问
估计问题不在母版页   因为在cs code中可以直接通过FindControl来找到TextBox2
但找到的都是第一个TextBox 而循环会产生很多的TextBox 无法来区分
因而在前台代码中(.aspx)包含了这样一个操作TextBox2.ID = "TextBox2" + n["ID"];
这个语句在aspx生成网页编码时是产生了作用的
<input id="ctl00_ContentPlaceHolder1_TextBox21"......
这样的重写ID操作是否规范
追答
但找到的都是第一个TextBox   而循环会产生很多的TextBox 无法来区分。。

你可以用ID标识。只取ID的值无论任何控件都有他独一的标识ID
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
易醉之人
2011-04-28 · 超过68用户采纳过TA的回答
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:135万
展开全部
TextBox TextBoxSql = Master.FindControl("ContentPlaceHolder1").FindControl("TextBox2" + n["ID"]) as TextBox;
string title = TextBoxSql.Text.ToString();
改成这个试一试:
string title =(( TextBox )Master.ContentPlaceHolder1.FindControl("TextBox2" + n["ID"])).Text.ToString();
追问
这样也不行   Master.ContentPlaceHolder1在cs中直接被加红线,通过
ContentPlaceHolder ContentPlaceHolderSql = Master.FindControl("ContentPlaceHolder1") as ContentPlaceHolder;
string title = ((TextBox)ContentPlaceHolderSql.FindControl("TextBox2" + n["ID"])).Text.ToString();
这样还是找不到TextBox
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
解忧解忧杂货铺
2011-04-28 · TA获得超过590个赞
知道小有建树答主
回答量:1536
采纳率:33%
帮助的人:689万
展开全部
BindCatalogData(((ASP.MyMaster)Master).IDValue);
追问
初学 这个不明白是什么意思  TextBox是在内容页面里
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式