asp.net问题点集合


这篇是集合在写asp.net程序中碰到的各种问题集合。平时遇到的问题慢慢累积在这儿,以后碰到时,有个印象,也好到这儿来寻找解答。

目录

a. 在母板页中,为什么刷新后使用Request.params取不到控件中的值

1.在母板页中,为什么刷新后使用Request.params取不到控件中的值

今天碰到一个很奇怪的现象,在一个如下的母板页中:

<asp:ContentID="Content2"ContentPlaceHolderID="ContentPlaceHolder1"Runat="Server">
<asp:ButtonID="Button2"runat="server"Text="Button"/>
<asp:LabelID="Label1"runat="server"ForeColor="#CCFFCC"Text="BBB"></asp:Label>
<asp:TextBoxID="TextBox1"runat="server"Text="bbb"></asp:TextBox>
</asp:Content>

然后在Page_load函数中编辑如下代码:

protectedvoidPage_Load(objectsender,EventArgse)
{
Label1.Text
=Request.Params["TextBox1"];
}

按照理解,在点击Button后,Label1会显示TextBox1中的值。但是结果什么也没有。原因是:

MSDN解释:任何实现该接口的控件都创建一个新的命名空间,在这个新的命名空间中,所有子控件ID属性在整个应用程序内保证是唯一的。由该接口提供的标记允许在支持数据绑定的Web服务器控件内唯一命名动态生成的服务器控件实例。这些控件包括Repeater、DataGrid、DataList、CheckBoxList、ChangePassword、LoginView、Menu、SiteMapNodeItem及RadioButtonList控件。

其它解释:
.Request.Form根据ClientID获取值,而不是ID。嵌套在Repeater或者FormView这类控件里面,ClientID是自身ID加上容器控件的ID作为前缀,因此不同于ID本身。
.因为嵌套了容器控件,所以在Page级别进行FindControl也是找不到的,你要在容器控件上做FindControl。

上面的例子应该修改成:

protectedvoidPage_Load(objectsender,EventArgse)
{
TextBoxtb
=(TextBox)Page.Master.FindControl("ContentPlaceHolder1").FindControl("TextBox1");
Label1.Text
=tb.Text;
}

当然,以上针对服务器控件来看,好像是多余了,直接使用Label1.Text = TextBox1.Text就可以了。
但是,如果是HTML控件,这样就比较有效果了。比如:

<asp:ContentID="Content2"ContentPlaceHolderID="ContentPlaceHolder1"Runat="Server">
<asp:ScriptManagerID="ScriptManager1"runat="server"></asp:ScriptManager>
<asp:UpdatePanelID="UpdatePanel1"runat="server"UpdateMode="Conditional">
<ContentTemplate>
<inputtype=hiddenid="Dynamic_UserControl_Hidden1"runat="server"/>//HTML控件
<asp:ButtonID="Button1"runat="server"Text="Button"onclick="Button1_Click"OnClientClick="ShowControl()"/>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Content>

以上,在页面刷新后想取得Dynamic_UserControl_Hidden1中的值,可以这样:

protectedvoidPage_Load(objectsender,EventArgse)
{
//嵌套容器,在容器上做FindControl
HtmlInputHiddenhiHidden=(HtmlInputHidden)UpdatePanel1.ContentTemplateContainer.FindControl("Dynamic_UserControl_Hidden1");
Label1.Text
=hiHidden.Value;
}

然后,还有一个就是javascript的问题:
在脚本中使用以下语句会得到"为空或不是对象"的错误
document.getElementById("TextBox1").value
主要原因也是因为在生成页面后,控件的ID被变掉了。可以使用以下语句
document.getElementById("<%=TextBox1.ClientId%>”).value;
具体的,可以查询以下几个URL:
http://www.itstrike.cn/Home/Article/Asp.net-in-the-master-page-ID-of-the-control-treatment
http://topic.csdn.net/u/20080503/18/205102e1-7f6c-4858-970e-f7b9ce390b0e.html
http://msdn.microsoft.com/zh-cn/library/system.web.ui.inamingcontainer%28VS.85%29.aspx

优质内容筛选与推荐>>
1、Struts---MVC(简介)
2、web初探-css-设置表格样式
3、LeetCode #5 Longest Palindromic Substring (M)
4、Web页面打印
5、程序算法与人生选择


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn