C# 控件未显示在CodeBehind中?

C# 控件未显示在CodeBehind中?,c#,asp.net,C#,Asp.net,我有我的主页: <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="KezberProjectManager.master.cs" Inherits="KezberProjectManager.KezberProjectManager" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR

我有我的主页:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="KezberProjectManager.master.cs" Inherits="KezberProjectManager.KezberProjectManager" %>

<!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>

    <!-- Le styles -->
    <link href="assets/css/bootstrap.css" rel="stylesheet"/>
    <link href="assets/css/bootstrap-responsive.css" rel="stylesheet"/>
    <link href="assets/css/kezblu.styles.css" rel="stylesheet"/>

    <style type="text/css">

    </style>
    <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
    <!--[if lt IE 9]>
      <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->
    <script type="text/javascript" src="http://code.jquery.com/jquery-1.9.0.min.js"></script>
    <script type="text/javascript" src="assets/js/kezcommon.js"></script>
    <script type="text/javascript">

        $(document).ready
    (
        function () {

            createAutoClosingAlert('.success_alert', 6000);
        }
    );

        function createAutoClosingAlert(selector, delay) {
            var alert = $(selector).alert();
            window.setTimeout(function () { $(alert).slideUp() }, delay);
        }

</script>  


    <asp:ContentPlaceHolder ID="head" runat="server">
    </asp:ContentPlaceHolder>
</head>
<body>
    <form id="form1" runat="server">
<asp:Repeater runat="server" id="MenuRepeater">
  <headertemplate>
       <div class="navbar navbar-inverse navbar-fixed-top">
      <div class="navbar-inner">
        <div class="container">
          <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </a>
          <a class="brand" href="#">KezBlu</a>
          <div class="nav-collapse collapse">
            <ul class="nav">
  </headertemplate>
  <itemtemplate>
     <%# Eval("Content") %>
  </itemtemplate>
  <footertemplate>
             </ul>

          </div><!--/.nav-collapse -->
        </div>
      </div>
    </div>
  </footertemplate>
 </asp:Repeater>


    <div id="wrap">
       <div id="content">
           <div id="alerts">
               <div class="bs-docs-example">
                        <div id="auth">
                 <asp:HyperLink id="HyperLink1" runat="server">HyperLink</asp:HyperLink>
             </br>
                 <asp:HyperLink id="HyperLink2" runat="server">HyperLink</asp:HyperLink>
             </div>
              <div runat="server"  id="success_alert" class="success_alert alert alert-success fade in">
                <button type="button" class="close" data-dismiss="alert">&times;</button>
                   <div runat="server" id="success_alert_text">
                </div>
              </div>
             </div>
              <div class="bs-docs-example">
              <div runat="server" id="error_alert" class="error_alert alert alert-error fade in">
                <button type="button" class="close" data-dismiss="alert">&times;</button>
                <div runat="server" id="error_alert_text">
                </div>
              </div>
             </div>
            </div>
       <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">

       </asp:ContentPlaceHolder>
       </div>


    </div>
    </form>
      <!-- Le javascript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->

    <script type="text/javascript" src="assets/js/bootstrap.min.js"></script>
</body>
</html>

$(文件)。准备好了吗
(
函数(){
创建自动关闭警报('.success\u alert',6000);
}
);
函数createAutoClosingAlert(选择器,延迟){
var-alert=$(选择器).alert();
setTimeout(函数(){$(警报).slideUp()},延迟);
}
超链接
超链接 &时代; &时代;
在那里我有:

     <div id="auth">
         <asp:HyperLink id="HyperLink1" runat="server">HyperLink</asp:HyperLink>
     </br>
         <asp:HyperLink id="HyperLink2" runat="server">HyperLink</asp:HyperLink>
     </div>

超链接

超链接
就像这样,链接在代码隐藏中显示得很好

现在,如果我将它们移动到中继器的页脚中:


超链接
超链接

然后它们就不能再用于代码隐藏

我真的不明白这一点


为什么不工作?

因为控件不再位于主窗体上,它们不再是
页面的属性。它们可以通过
中继器
访问


有关通过中继器访问控件的示例,请参见。当您将对象放入中继器、网格等时,您必须在后端进行更多处理才能找到它们。基本上,当中继器绑定时,您可以遍历并搜索对象,然后访问其属性

例如,这里有一个链接,指向中继器在绑定项时查找各种项控件的一些代码

protected void rptTaskListOnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
            var lnkEdit = e.Item.FindControl("lnkEdit") as HyperLink;
            var lnkDelete = e.Item.FindControl("lnkDelete") as LinkButton;

            var pnlAdminControls = e.Item.FindControl("pnlAdmin") as Panel;

            var t = (Task)e.Item.DataItem;

            if (IsEditable && lnkDelete != null && lnkEdit != null && pnlAdminControls != null)
            {
                pnlAdminControls.Visible = true;
                lnkDelete.CommandArgument = t.TaskId.ToString();
                lnkDelete.Enabled = lnkDelete.Visible = lnkEdit.Enabled = lnkEdit.Visible = true;

                lnkEdit.NavigateUrl = EditUrl(string.Empty, string.Empty, "Edit", "tid=" + t.TaskId);

                ClientAPI.AddButtonConfirm(lnkDelete, Localization.GetString("ConfirmDelete", LocalResourceFile));
            }
            else
            {
                pnlAdminControls.Visible = false;
            }
        }
    }

就我个人而言,我从来没有尝试过访问中继器的页眉或页脚中的控件,但我确信这将是类似的中继器项
具有不同的
NamingContainer
。您只能直接访问页面顶部的控件,因为这些控件是在partial codebehind类中自动创建的。您必须使用
FindControl
获取
RepeaterItem
中控件的引用

在这种情况下,您可以使用中继器的事件:


“那么它们就不能在代码隐藏中使用了。”解释一下“不能使用”的意思。简短的回答是,“这就是模板化控件的工作原理”。稍微长一点的回答是,您已经更改了控件的父控件,因此页面本身不再拥有该控件。由于您将其放置在repeater控件中,因此它们在代码隐藏中无法直接访问。检查这个
protected void rptTaskListOnItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
        {
            var lnkEdit = e.Item.FindControl("lnkEdit") as HyperLink;
            var lnkDelete = e.Item.FindControl("lnkDelete") as LinkButton;

            var pnlAdminControls = e.Item.FindControl("pnlAdmin") as Panel;

            var t = (Task)e.Item.DataItem;

            if (IsEditable && lnkDelete != null && lnkEdit != null && pnlAdminControls != null)
            {
                pnlAdminControls.Visible = true;
                lnkDelete.CommandArgument = t.TaskId.ToString();
                lnkDelete.Enabled = lnkDelete.Visible = lnkEdit.Enabled = lnkEdit.Visible = true;

                lnkEdit.NavigateUrl = EditUrl(string.Empty, string.Empty, "Edit", "tid=" + t.TaskId);

                ClientAPI.AddButtonConfirm(lnkDelete, Localization.GetString("ConfirmDelete", LocalResourceFile));
            }
            else
            {
                pnlAdminControls.Visible = false;
            }
        }
    }
protected void Repater1_ItemDataBound(Object Sender, RepeaterItemEventArgs e)
{
    // This event is raised for the header, the footer, separators, and items.
    if (e.Item.ItemType == ListItemType.Footer)
    {
        HyperLink hl = (HyperLink)e.Item.FindControl("HyperLink1");
    }
}