带隐藏字段的中继器

发布于 2024-10-07 07:57:15 字数 2496 浏览 0 评论 0原文

我在标记为“AdminGetAllRPT”的中继器中有以下隐藏字段:

 <asp:Repeater ID="AdminGetAllRPT" runat="server" OnLoad="AdminGetAllRPT_Load">
    <HeaderTemplate>
        <table id="AdminGetAllTBL">
            <tr>
                <td></td>
                <td>Username</td>
                <td>Email Address</td>
                <td>First Name</td>
                <td>Last Name</td>
                <td>Active?</td>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
       <tr>
           <td>
               <asp:LinkButton ID="AdminEditLnk" runat="server" OnClick="AdminEdit_OnClick">Edit
               <asp:HiddenField ID="editAdminEmail" runat="server" Value='<%# Eval("emailAddress") %>' />
               </asp:LinkButton>
           </td>
           <td><%# Eval("userName") %></td>
           <td><%# Eval("emailAddress") %></td>
           <td><%# Eval("firstName") %></td>
           <td><%# Eval("lastName") %></td>
           <td><%# Eval("isActive") %></td>
       </tr>
    </ItemTemplate>
    <AlternatingItemTemplate>
        <tr class="alternateTemplate">
           <td>
               <asp:LinkButton ID="AdminEditLnk" runat="server" OnClick="AdminEdit_OnClick">Edit
               <asp:HiddenField ID="editAdminEmail" runat="server" Value='<%# Eval("emailAddress") %>' />
               </asp:LinkButton>
           </td>
           <td><%# Eval("userName") %></td>
           <td><%# Eval("emailAddress") %></td>
           <td><%# Eval("firstName") %></td>
           <td><%# Eval("lastName") %></td>
           <td><%# Eval("isActive") %></td>
       </tr>
    </AlternatingItemTemplate>
    <FooterTemplate>
            <tr>
                <td colspan="2"><a href="#">Add Administrator</a></td>
            </tr>
        </table>
    </FooterTemplate>
</asp:Repeater>

我有一个触发此代码的链接按钮:

protected void AdminEdit_OnClick(object sender, EventArgs e)
{
    HiddenField hf = (HiddenField)AdminGetAllRPT.FindControl("editAdminEmail");

但 hf 为空。我做错了什么?

I have the following HiddenField within a Repeater labeled "AdminGetAllRPT":

 <asp:Repeater ID="AdminGetAllRPT" runat="server" OnLoad="AdminGetAllRPT_Load">
    <HeaderTemplate>
        <table id="AdminGetAllTBL">
            <tr>
                <td></td>
                <td>Username</td>
                <td>Email Address</td>
                <td>First Name</td>
                <td>Last Name</td>
                <td>Active?</td>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
       <tr>
           <td>
               <asp:LinkButton ID="AdminEditLnk" runat="server" OnClick="AdminEdit_OnClick">Edit
               <asp:HiddenField ID="editAdminEmail" runat="server" Value='<%# Eval("emailAddress") %>' />
               </asp:LinkButton>
           </td>
           <td><%# Eval("userName") %></td>
           <td><%# Eval("emailAddress") %></td>
           <td><%# Eval("firstName") %></td>
           <td><%# Eval("lastName") %></td>
           <td><%# Eval("isActive") %></td>
       </tr>
    </ItemTemplate>
    <AlternatingItemTemplate>
        <tr class="alternateTemplate">
           <td>
               <asp:LinkButton ID="AdminEditLnk" runat="server" OnClick="AdminEdit_OnClick">Edit
               <asp:HiddenField ID="editAdminEmail" runat="server" Value='<%# Eval("emailAddress") %>' />
               </asp:LinkButton>
           </td>
           <td><%# Eval("userName") %></td>
           <td><%# Eval("emailAddress") %></td>
           <td><%# Eval("firstName") %></td>
           <td><%# Eval("lastName") %></td>
           <td><%# Eval("isActive") %></td>
       </tr>
    </AlternatingItemTemplate>
    <FooterTemplate>
            <tr>
                <td colspan="2"><a href="#">Add Administrator</a></td>
            </tr>
        </table>
    </FooterTemplate>
</asp:Repeater>

I have a linkbutton that fires this code:

protected void AdminEdit_OnClick(object sender, EventArgs e)
{
    HiddenField hf = (HiddenField)AdminGetAllRPT.FindControl("editAdminEmail");

but the hf is coming up null. What am I doing wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

自我难过 2024-10-14 07:57:15

将 AdminGetAllRPT.FindControl... 更改

e.Item.FindControl...

编辑:感谢您对正确答案的投票。

但是,是的,e.Item.FindControl 正是您想要的,因为您要做的不是按钮上的事件,而是转发器的 ItemCommand 上的事件。

<asp:Repeater OnItemCommand="MyButtonCommandEvent" ID="AdminGetAllRPT" runat="server" OnLoad="AdminGetAllRPT_Load">

然后在代码隐藏中,您可以设置事件

void MyButtonCommandEvent(Object src, RepeaterCommandEventArgs e) {  
   //My event that is raised for each button pressed in the RepeaterItem
   var poo = e.Item.FindControl("myhiddenfieldid") as HiddenField;
}

Done...


要迭代所有 RepeaterItems,您可以在转发器外部有一个按钮(或者可能在页脚或其他位置,这不是转发器 ItemCommand)

foreach(var item in AdminGetAllRPT.Items)
{
    if (item.ItemType == RepeaterItemType.Item || item.ItemType == RepeaterItemType.AlternatingItem)
    {
        var hiddenField = item.FindControl("hiddenFieldid") as HiddenField;
        //Do Stuff
    }
}

Change AdminGetAllRPT.FindControl...

to

e.Item.FindControl...

Edit: Thanks for the votedown on a correct answer.

But yes e.Item.FindControl is what you want because what you're trying to do is not an event on the button, it's an event on the ItemCommand of the repeater.

<asp:Repeater OnItemCommand="MyButtonCommandEvent" ID="AdminGetAllRPT" runat="server" OnLoad="AdminGetAllRPT_Load">

Then in the code-behind you can setup the event

void MyButtonCommandEvent(Object src, RepeaterCommandEventArgs e) {  
   //My event that is raised for each button pressed in the RepeaterItem
   var poo = e.Item.FindControl("myhiddenfieldid") as HiddenField;
}

Done...


To iterate over all RepeaterItems, you can have a button outside of the repeater (or maybe in the footer or something, this is not a repeater ItemCommand)

foreach(var item in AdminGetAllRPT.Items)
{
    if (item.ItemType == RepeaterItemType.Item || item.ItemType == RepeaterItemType.AlternatingItem)
    {
        var hiddenField = item.FindControl("hiddenFieldid") as HiddenField;
        //Do Stuff
    }
}
睫毛溺水了 2024-10-14 07:57:15

另一件事是,它可能没有封装在您的编辑按钮控件下。

例如,要使查找控件方法正常工作,它应该如下所示:

<asp:button id="AdminEdit" runat="server" onclick.... >
   <!-- Now put in your hidden field control inside (encapulated) in your button. -->
   <asp:HiddenField ID="editAdminEmail" runat="server" Value='<%# Eval("emailAddress") %>' /> 
</asp:button>

由于 AdminEdit.Controls 是控件的容器,因此您现在应该能够找到该控件作为第一级子控件。如果它不是按钮的子级,您需要将其设为子级,或者从不同的方法引用它。对于动态生成的控件尤其如此。即...它是哪个控件或根元素的子元素?

One other thing, it may not be encapsulated under your edit button control.

For instance it should look like so for the find control method to work:

<asp:button id="AdminEdit" runat="server" onclick.... >
   <!-- Now put in your hidden field control inside (encapulated) in your button. -->
   <asp:HiddenField ID="editAdminEmail" runat="server" Value='<%# Eval("emailAddress") %>' /> 
</asp:button>

Since AdminEdit.Controls is a container of controls, you should now be able to find that control as a first level child. If it is not a child of the button, you will either need to make it a child, or reference it from a different method. This is especially true for dynamically generated controls. Ie... what control or root element is it a child of?

故事灯 2024-10-14 07:57:15

您需要找到 RepeaterItem 中的隐藏字段。

foreach(var item in AdminGetAllRPT.Items)
{        
   var hf = (HiddenField)item.FindControl("editAdminEmail");
}

You need to find the hidden field within a RepeaterItem.

foreach(var item in AdminGetAllRPT.Items)
{        
   var hf = (HiddenField)item.FindControl("editAdminEmail");
}
一场信仰旅途 2024-10-14 07:57:15

正如 jball 指出的,您需要在转发器项目级别进行搜索。您的链接按钮位于哪里?我相信它应该在中继器本身内(否则你可以有多个隐藏字段(每个中继器行一个),并且应该由链接按钮选取哪一个?)。因此,如果链接按钮和隐藏字段都在转发器中,那么您可以使用以下代码

protected void AdminEdit_OnClick(object sender, EventArgs e)
{
    var repeaterItem = ((Control)sender).NamingContainer;
    HiddenField hf = (HiddenField)repeaterItem.FindControl("editAdminEmail");

As jball has pointed out, you need to search at repeater item level. Where is your link button located? I believe that it should be within repeater it self (otherwise you can have multiple hidden fields (one for each repeater row) and which one is supposed to be picked up by linkbutton?). So if both link button and hidden field are in repeater then you can use code such as

protected void AdminEdit_OnClick(object sender, EventArgs e)
{
    var repeaterItem = ((Control)sender).NamingContainer;
    HiddenField hf = (HiddenField)repeaterItem.FindControl("editAdminEmail");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文