模板的问题

wanghao3616 2008-06-24 09:30:47
模板
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!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>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>
</body>
</html>


页面
<%@ Page Language="C#" MasterPageFile="~/ASKPrice/MasterPage.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ASKPrice_Default" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="contentplaceholder1" Runat="Server">
<asp:TextBox ID="product1_name" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="提交询价" EnableTheming="False" PostBackUrl="~/ASKPrice/Default.aspx" />
</asp:Content>

cs文件
protected void Button1_Click(object sender, EventArgs e)
{
string s = ((TextBox)Page.Form.FindControl("product1_name")).Text;
}


报错:异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。

cs文件
protected void Button1_Click(object sender, EventArgs e)
{
string s = ((TextBox)this.FindControl("product1_name")).Text;
}

成功 什么原因 ?
...全文
150 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
大自然D使者 2008-06-24
  • 打赏
  • 举报
回复
学习了…………………………
tinalucky 2008-06-24
  • 打赏
  • 举报
回复
Page.Form指的是母版页,而内容页面是没有Form标签的,所以你的string s = ((TextBox)Page.Form.FindControl("product1_name")).Text; 会报错。而string s = ((TextBox)this.FindControl("product1_name")).Text;这一句this指的是当前对象所以编译能通过
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 namhyuk 的回复:]
Page.Form是指母版页里的form,
如果在母版页里你放了个同名的product1_name

HTML code
<form id="form1" runat="server">
<div>
<asp:TextBox ID="product1_name" runat="server"> </asp:TextBox>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>



那么你可以Page.Form.FindControl("product1_name")来…
[/Quote]
namhyuk 2008-06-24
  • 打赏
  • 举报
回复
Page.Form是指母版页里的form,
如果在母版页里你放了个同名的product1_name

<form id="form1" runat="server">
<div>
<asp:TextBox ID="product1_name" runat="server"> </asp:TextBox>
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>

那么你可以Page.Form.FindControl("product1_name")来取得母版页的product1_name。
zhangxuyu1118 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hubblebubblepig 的回复:]
引用 2 楼 chengqscjh 的回复:
用Page.FindControl("ContentPlaceHolder1").FindControl("product1_name")
[/Quote]
wzy_love_sly 2008-06-24
  • 打赏
  • 举报
回复
模板中的控件用page.find找不到,输出的页面树不是一个
HimeTale 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chengqscjh 的回复:]
参考:
应用了母板页后,由于层次多了,FindControl不能检索到深层的控件,所以要改为: TextBox txt = (TextBox ) Page.PreviousPage.Form.FindControl("ContentPlaceHolder1").FindControl("txtSearch");
在应用了母版页的页面里,即使Page.FindControl("txtSearch")都是不行的,必
须用Page.Form.FindControl("ContentPlaceHolder1").FindControl("txtSearch")
[/Quote]
补充一下,如果明确知道要找的控件在什么层次上,直接FindControl也是可以的。
比如:(CheckBox)GridView.Rows[0].FindControl("Checkbox1");
hubblebubblepig 2008-06-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 chengqscjh 的回复:]
用Page.FindControl("ContentPlaceHolder1").FindControl("product1_name")
[/Quote]
chengqscjh 2008-06-24
  • 打赏
  • 举报
回复
参考:
应用了母板页后,由于层次多了,FindControl不能检索到深层的控件,所以要改为: TextBox txt = (TextBox ) Page.PreviousPage.Form.FindControl("ContentPlaceHolder1").FindControl("txtSearch");
在应用了母版页的页面里,即使Page.FindControl("txtSearch")都是不行的,必
须用Page.Form.FindControl("ContentPlaceHolder1").FindControl("txtSearch")
yagebu1983 2008-06-24
  • 打赏
  • 举报
回复
string s = ((TextBox)Page.Form.FindControl("product1_name")).Text;
去掉Form试试!!

62,243

社区成员

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

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

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

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