尝试在 MasterPage 中查找控件时出现问题

Posted

技术标签:

【中文标题】尝试在 MasterPage 中查找控件时出现问题【英文标题】:Issue trying to find a control inside a MasterPage 【发布时间】:2017-11-05 10:57:52 【问题描述】:

我正在尝试在 asp.page 的代码隐藏文件中使用 C# 更改 html <div> 标记中的 DATA 属性。

这是我的 HTML 代码

<div class="tile page-content" id="fullTextArticle"
                    data-ID=""
                    data-permission="" runat="server">
</div>

这是我在代码隐藏文件中的 c#

private void DisplayFullTextArticle()
        


            string contentID = "";

            if (Context.Request.QueryString["contentID"] != null)//check for a value in the query string
            
                contentID = Context.Request.QueryString["contentID"];

                try 
                

                    //define connection string                
                    string connString = WebConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

                    using (SqlConnection conn = new SqlConnection(connString))//create connection object
                    

                        SqlCommand cmd = new SqlCommand("spDisplayFullTextArticle", conn);

                        cmd.CommandType = CommandType.StoredProcedure;

                        conn.Open();

                        cmd.Parameters.Add("@ID", SqlDbType.Int).Value = Convert.ToInt32(contentID);

                        SqlDataReader myReader = cmd.ExecuteReader();

                        HtmlControl divDataID = FindControl(id: "fullTextArticle") as HtmlControl;


                        while (myReader.Read())
                        
                            divDataID.Attributes["class"]= myReader["ID"].ToString();

                        

                        myReader.Close();                      

                        ////end using statement for SqlCommmand Object

                    //end using statement for SQLConnection

                //end try block

                catch (Exception ex)
                

                 //end catch block

            //end if statement


一些上下文:我的方法从查询字符串中获取一个值并将该值传递给一个存储过程,该存储过程运行一个 SELECT 查询以从 SQL 数据库中提取全文内容。我使用断点进行了一些调试,我可以看到查询字符串确实将值传递给过程并且它成功运行了查询。问题是我的 HtmlControl 变量 divDataID 最终为空。所以没有设置ID值,所以浏览器中没有设置&lt;div data-ID&gt;属性。

有谁知道我做错了什么?如何从代码隐藏文件中设置 data-ID 属性?

【问题讨论】:

【参考方案1】:

当您使用母版页时,查找控件会比较棘手。你应该这样做:

var divDataID = Master.FindControl("ContentPlaceHolder").FindControl(id: "fullTextArticle") as HtmlControl;

其中"ContentPlaceHolder" 是母版页中的 ContentPlaceHolder ID。

【讨论】:

你好 kblok。我的原始代码确实具有 runat="server" 属性,但是我在这里发布时忘记包含(我已经更新了我的帖子)。我在代码中的方法是将 识别为服务器控件并执行存储过程,只是我的 HtmlControl 变量 dataDivID 为空。你知道我该如何解决这个问题吗? @webguy 是另一个服务器控件中的 div 吗? FindControl 不是递归的。我刚刚在本地测试过,它可以工作。 位于内容页面上,不,它没有嵌套在另一个服务器控件中。但是,在我的母版页中, 标记包含一个
标记,并且在该标记之间是存在我在这篇文章中提到的 div 问题的内容页面的占位符。
@webguy 检查新答案。 你太棒了!!您指定母版页占位符 ID 的解决方案起到了作用。它工作得很好!我被困在这个问题上很长时间了,你让它变得简单容易修复。我真的很感谢你的帮助!这篇文章应该对这里的其他编码人员有所帮助,因为这种情况是独一无二的,以前从未解决过。

以上是关于尝试在 MasterPage 中查找控件时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

尝试为标签控件赋值时出现跨线程操作错误[重复]

尝试在 https://pub.dartlang.org 查找包 ABC 时出现 TLS 错误

尝试查找棋盘角时出现opencv python错误

在opencv c ++中查找图像卷积时出现分段错误(核心转储)错误

在 MFC 中同时显示消息和进度时出现问题?

Magnolia cms - 在 Windows 上查找模板时出现 FileNotFoundException 错误