Updatepanel内的下拉列表未传递选定的项

时间:2018-02-02 14:38:44

标签: c# asp.net gridview webforms

我有一个具有隐藏/显示面板的Gridview。面板内有一个下拉按钮和一个按钮。按下按钮我需要下拉列表的选定值,但我会继续获取第一个项目,不选择所选内容。

我一直在调查这个问题,它与面板控件有关。如果我将下拉列表放在面板外,一切都按预期工作。但是下拉列表仅在面板内部传递第一个值。

这是我的代码:

ASP代码

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="DD.aspx.cs" Inherits="DD" %>

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" />
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <title></title>
       <script type="text/javascript">

        $(document).on("click", '[src*=plus]', function () {
            $(this).closest("tr").after("<tr><td></td><td colspan = '999'>" + $(this).next().html() + "</td></tr>")
            $(this).attr("src", "images/minus.png");
        });

        $(document).on("click", '[src*=minus]', function () {
            $(this).attr("src", "images/plus.png");
            $(this).closest("tr").next().remove();

        })
    </script>
</head>
<body>
    <form id="form1" runat="server">
       <asp:ScriptManager runat="server"></asp:ScriptManager>
                                     <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:constr %>" SelectCommand="SELECT * FROM [Requests]"></asp:SqlDataSource>
         <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:constr %>" SelectCommand="SELECT [Name] FROM [Staff]"></asp:SqlDataSource>
        <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="RequestID" DataSourceID="SqlDataSource1">
            <Columns>
                <asp:BoundField DataField="RequestID" HeaderText="RequestID" InsertVisible="False" ReadOnly="True" SortExpression="RequestID" />
                <asp:TemplateField>
                   <ItemTemplate>
                        <img runat="server" style="cursor: pointer" src="images/plus.png" />
                        <asp:UpdatePanel ID="pnlOrders" runat="server" Style="display: none"  UpdateMode="Conditional">

                            <ContentTemplate>                
        <asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource2" DataTextField="Name" DataValueField="Name" AutoPostBack="true">
        </asp:DropDownList>
       <asp:Button runat="server" ID="test" OnClick="test_Click" />
                         </ContentTemplate>     </asp:UpdatePanel>
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </form>
</body>
</html>

C#代码

protected void test_Click(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    GridViewRow gvr = (GridViewRow)btn.NamingContainer;
    DropDownList referalDD = gvr.FindControl("DD1") as DropDownList;
    string www = referalDD.SelectedItem.Text;
    string qqq = referalDD.SelectedItem.Value;
}

任何人都可以帮我解决这个问题

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了一个解决方案/解决方案。感谢Niko提出的占位符建议。 我摆脱了这段代码:

<img runat="server" style="cursor: pointer" src="images/plus.png" />

和相关的Jquery

$(document).on("click", '[src*=plus]', function () {
    $(this).closest("tr").after("<tr><td></td><td colspan = '999'>" + $(this).next().html() + "</td></tr>")
    $(this).attr("src", "images/minus.png");
});

$(document).on("click", '[src*=minus]', function () {
    $(this).attr("src", "images/plus.png");
    $(this).closest("tr").next().remove();

})

在更新面板周围添加了占位符和图像按钮

<asp:ImageButton runat="server" ID="ShowHide" ImageUrl="~/images/plus.png" OnClick="ShowHide_Click"  />
<asp:PlaceHolder ID="PlaceHolder1" runat="server" Visible="false">

这个按钮点击事件的代码。

protected void ShowHide_Click(object sender, EventArgs e)
{
    ImageButton btn = (ImageButton)sender;
    GridViewRow gvr = (GridViewRow)btn.NamingContainer;
    PlaceHolder ph = gvr.FindControl("PlaceHolder1") as PlaceHolder;
    if (btn.ImageUrl.ToString() == "~/images/plus.png")
    {
        ph.Visible = true;
        btn.ImageUrl = "~/images/minus.png";
    }
    else
    {
        ph.Visible = false;
        btn.ImageUrl = "~/images/plus.png";
    }

}

注意:经过进一步测试后,整个问题与UpdatePanel有关,此代码 Style =“display:none”我删除后,一切正常。但是我通过show / Hide功能添加了占位符。