如何从按钮上的DataList页脚获取信息单击

时间:2013-12-15 20:36:44

标签: c# asp.net datalist findcontrol

我有一个ASP.NET DataList,其中定义了一个页脚:

<FooterTemplate>
    <asp:DropDownList ID="ddlStatusList" runat="server">
    </asp:DropDownList>
    <input id="txtNotes" type="text" placeholder="Notes" />
    <asp:Button runat="server" type="button" Text="Add" ID="btnAdd"></asp:Button>
</FooterTemplate>

我想要做的是,点击btnAdd,获取txtNotesddlStatusList的值,但我无法弄清楚如何访问控件,更不用说价值观了。

我无法关注this之类的内容,因为我无法检查我的按钮是否已被点击(可能带有复选框),即便如此,我也不确定是否如所示,将能够使用findControl。 (DataList的页脚与项目的行为有何不同?)

我无法使用Button的{​​{1}}&amp; commandName属性,因为在数据绑定时,输入的文本将不存在,因此我无法设置commandValue

我尝试使用CommandValue而不是普通的.NET LinkButton,但遇到了同样的问题,我无法弄清楚如何从Button /获取值TextBox

2 个答案:

答案 0 :(得分:2)

以下应该工作。请参阅我为txtNotes添加了runat =“Server”:

ASPX:

<FooterTemplate>
    <asp:DropDownList ID="ddlStatusList" runat="server">
    </asp:DropDownList>
    <input id="txtNotes" runat="server" type="text" placeholder="Notes" />
    <asp:Button runat="server" type="button" Text="Add" ID="btnAdd"></asp:Button>
 </FooterTemplate>

C#:

protected void btnAdd_Click(object sender, EventArgs e)
    {
        var txtNotes = (System.Web.UI.HtmlControls.HtmlInputText)(((Button)sender).Parent).FindControl("txtNotes");
        var ddlStatusList = (DropDownList)(((Button)sender).Parent).FindControl("ddlStatusList");
    }

答案 1 :(得分:0)

您可以使用Control.NamingContainer连续访问其他控件:

    <FooterTemplate>
        <asp:DropDownList ID="ddlStatusList" runat="server">
        </asp:DropDownList>
        <input id="txtNotes" type="text" placeholder="Notes" runat="server" />
        <asp:Button runat="server" type="button" Text="Add" ID="btnAdd" OnClick="btnAdd_Click"></asp:Button>
    </FooterTemplate>

    protected void btnAdd_Click(object sender, EventArgs e)
    {
        Button btnAdd = (Button)sender;
        DropDownList ddlStatusList = (DropDownList)btnAdd.NamingContainer.FindControl("ddlStatusList");
        System.Web.UI.HtmlControls.HtmlInputText txtNotes = (System.Web.UI.HtmlControls.HtmlInputText)btnAdd.NamingContainer.FindControl("txtNotes");
        int index = ddlStatusList.SelectedIndex;
        string text = txtNotes.Value;
    }