1

我知道它可能不寻常,但我想将 htmlGenericControl 添加到 CodeBehind 的 ItemDataBound 中的 div (它在中继器之外)。

HtmlGenericControl slider = (HtmlGenericControl)e.Item.FindControl("slider");

htmlGenericControl input = new HtmlGenericControl("input");
input.Attributes.Add("type", "radio");
input.Attributes.Add("name", "slide_switch");
input.Attributes.Add("id", string.Format("projectImage-{0}", item.ProjectImageId));

slider.Controls.Add(input);

但它每次都返回null 。这是aspx代码:

  <div class="slider">
      <asp:Repeater ID="rptProjectImages" runat="server" OnItemDataBound="rptProjectImages_ItemDataBound">

           <ItemTemplate>
           </ItemTemplate>

       </asp:Repeater>
   </div>
4

3 回答 3

2

没有使用 asp.net 太久,但这可能会有所帮助

<div id="myDiv" runat="server">...</div>

并且在代码隐藏中myDiv 应该可以访问。

于 2016-11-02T16:41:43.847 回答
1

这段代码有几个问题。

首先,您的 div 只是客户端,从服务器端的角度来看,它只是一个字符串。通过以下方式将其转换为服务器端控件:

<div class="slider" runat="server" ID="slider">

其次,FindControl仅查找直属子项,在您的情况下为转发器项的子项。slider不是其中之一。此外,它不是中继器项目模板的一部分,应该可以在后面的代码中访问,所以只需

slider.Controls.Add(...

也就是说,除非slider您展示的中继器是某些“外部”控件的其他模板的一部分。在这种情况下,请确保使用该“外部”控件进行调用FindControl

最后,不要乱来id。我敢打赌,这要么会被 ASP.NET 覆盖,要么会导致页面出现问题。而是将客户端 ID 模式设置为静态并分配 ID 属性:

input.ClientIDMode = ClientIDMode.Static;
input.ID = string.Format("projectImage_{0}", item.ProjectImageId);

这最终会为id您输出所需的相同值,但以更符合 ASP.NET 的方式。不过需要注意的是,我将“-”替换为“_”——服务器端控件的 ID 中不能有连字符

于 2016-11-02T16:47:59.803 回答
1

FindControl 在另一个控件中找到一个控件,但这样做是为了寻找控件的 ID。您的“滑块”控件没有 ID,它使用名为“滑块”的类但没有 ID。

您需要将控件定义为

<div runat="server" id="Slider" class="slider">
    <asp:Repeater ID="rptProjectImages" runat="server" OnItemDataBound="rptProjectImages_ItemDataBound">

         <ItemTemplate>
         </ItemTemplate>

     </asp:Repeater>
</div>

runat="server"告诉框架在您的代码中实例化该控件。id 将是该控件的对象的名称。然后在你的代码中,你可以做

htmlGenericControl input = new HtmlGenericControl("input");
input.Attributes.Add("type", "radio");
input.Attributes.Add("name", "slide_switch");
input.ID = string.Format("projectImage-{0}", item.ProjectImageId);

Slider.Controls.Add(input);
于 2016-11-02T16:48:52.490 回答