c# - 在 asp :repeater on button click event 中找到控件

标签 c# asp.net

我在 asp:repeater 项目模板中有一个下拉列表。 我怎样才能在按钮点击事件中获得它的值(value)。

<asp:Repeater runat="server" ID="WorkflowListAfter" onitemcreated="WorkflowListAfterItemCreated">
    <ItemTemplate>
         <asp:DropDownList ID="ddlWorkflowMembers" runat="server" DataTextField="MemberName" DataValueField="MemberID">
    </ItemTemplate>
</asp:Repeater>

protected DropDownList ddlWorkflowMembers = new DropDownList();
protected void WorkflowListAfterItemCreated(object sender, RepeaterItemEventArgs e)
{
    ddlWorkflowMembers = (DropDownList) e.Item.FindControl("ddlWorkflowMembers");
}
protected void BtnSaveClick(object sender, EventArgs e) {
    if (ddlWorkflowMembers.SelectedItem == null) return;
}

上面的代码在第一次运行但在回发之后 ddlWorkflowMembers 始终为 null expersion。

最佳答案

假设 BtnSave 也在转发器中。

您通过转换按钮的 NamingContainer 获得 RepeaterItem .然后您可以使用 FindControl 获取对您的 DropDownList 的引用:

protected void BtnSaveClick(object sender, EventArgs e) {
    var btn =  (Button)sender;
    var item = (RepeaterItem)btn.NamingContainer;
    var ddl =  (DropDownList) item.FindControl("ddlWorkflowMembers");
    // ...
}

如果按钮在中继器外面,你想保存所有的项目,你需要遍历所有:

protected void BtnSaveClick(object sender, EventArgs e) {
    foreach(RepeaterItem item in WorkflowListAfter.Items)
    {
        var ddl =  (DropDownList) item.FindControl("ddlWorkflowMembers");
        // ...
    }       
}

关于c# - 在 asp :repeater on button click event 中找到控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10880297/

相关文章:

c# - MVVMCross iOS 支持的方向

asp.net - 如何在 .NET 4.7.2 上为 OWIN OpenIdConnect.Nonce cookie 将 SameSite 值设置为 None 或 Undefined

asp.net - Visual Studio 2008 迫使我每次都重新构建网站以实现我所做的任何更改

c# - Selenium 2(网络驱动程序): Taking a Screenshot returns a black image

jquery - ASP.NET 的 jqGrid 的免费替代品?

javascript - HTML:选中复选框时使元素不可见

c# - asp.net中捕获请求静态文件

c# - Process.Kill() 返回拒绝访问

c# - 将 Observable 对象集合保存到 XML 文件的最简单方法是什么?

c# - 从 WCF 测试客户端调用时,WebBrowser 控件未在自承载 WCF 服务中导航