关于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
}
}
}
上面两个数据库的表名打错了 两表是一致的 展开
“/”应用程序中的服务器错误。
--------------------------------------------------------------------------------
未将对象引用设置到对象的实例。
说明: 执行当前 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
}
}
}
上面两个数据库的表名打错了 两表是一致的 展开
展开全部
Master.FindControl("ContentPlaceHolder1").FindControl("TextBox2" + n["ID"]) as TextBox;
这句建议将ContentPlaceHolder1改为Content 的ID。即:
Master.FindControl("Content2").FindControl("TextBox2" + n["ID"]) as TextBox;试下
这句建议将ContentPlaceHolder1改为Content 的ID。即:
Master.FindControl("Content2").FindControl("TextBox2" + n["ID"]) as TextBox;试下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
此方法有两解
(TextBox)(Master.FindControl("ContentPlaceHolder1").FindControl("TextBox2" + n["ID"]) ).text
第二种就是 ContentPlaceHolder1 该控件中有会有个itemcommand事件
直接调用默认会生成一个e 参数。
使用e.FindControl("TextBox2" + n["ID"]) ).text
(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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();
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
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
BindCatalogData(((ASP.MyMaster)Master).IDValue);
追问
初学 这个不明白是什么意思 TextBox是在内容页面里
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询