DropDownList проблема обратной передачи - PullRequest
1 голос
/ 21 декабря 2011

У меня есть DropDownList внутри usercontrol, который сам находится внутри usercontrol.

У меня проблема в том, что когда кто-то выбирает элемент из DDL, мне нужно запустить обратную передачу, чтобы я мог обновить некоторыетекстовые поля на внутреннем пользовательском контроле.

Но если я использую автостопбэк, я получаю ошибку JS: «Не удается переместить фокус на элемент управления, потому что он невидим, не включен или имеет тип, который не принимает фокус. "

У кого-нибудь есть идеи по этому поводу?Приводит меня в бешенство ...

       <asp:MultiView ID="mvInvoiceItem" runat="server" ActiveViewIndex="0">
        <asp:View ID="vwInvoiceItemList" runat="server">
            <asp:LinkButton ID="btn_AddInvoiceItem" runat="server" 
                onclick="btn_AddInvoiceItem_Click">Add Part</asp:LinkButton>
            <asp:GridView ID="gvwInvoiceItems" runat="server" AutoGenerateColumns="False" 
                EnableModelValidation="True" 
                OnRowCommand="gvwInvoiceItems_RowCommand"
                DataKeyNames="Id" 
                AllowPaging="True" Width="750px" PageSize="3" >
                <Columns>
                    <asp:BoundField DataField="Id" HeaderText="1" itemstyle-cssclass="invisibleColumn" >
                        <HeaderStyle CssClass="invisibleColumn" />
                        <ItemStyle CssClass="invisibleColumn" />
                    </asp:BoundField>
                    <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" />
                    <asp:BoundField DataField="Quantity" HeaderText="Quantity" SortExpression="Quantity" />
                    <asp:BoundField DataField="IsSupplied" HeaderText="IsSupplied" SortExpression="IsSupplied" />
                    <asp:BoundField DataField="Price" HeaderText="Price" SortExpression="Price" />
                    <asp:BoundField DataField="Cost" HeaderText="Cost" SortExpression="Cost" />
                    <asp:ButtonField ButtonType="Image" ImageUrl="~/Images/btn_select.png" CommandName="SelectRow" Text="Select" />
                    <asp:ButtonField ButtonType="Image" ImageUrl="~/Images/btn_remove.png" CommandName="RemoveRow" Text="Remove" />
                </Columns>
            </asp:GridView>
        </asp:View>
        <asp:View ID="vwInvoiceItemEdit" runat="server">
            <table>
                <tr>
                    <td class="style2">
                        <asp:Label ID="lbl_InvoiceItem" runat="server" 
                            Text="Part.."></asp:Label>
                    </td>
                    <td>
                        <asp:DropDownList ID="dd_InvoiceItem" runat="server" 
                            DataTextField="Name" DataValueField="Id" Width="215px" AutoPostBack="true"
                            OnSelectedIndexChanged="dd_InvoiceItem_SelectedIndexChanged">
                        </asp:DropDownList>
                    </td>
                </tr>
                <tr>
                    <td class="style2">
                        <asp:Label ID="lbl_InvoiceItemQuantity" runat="server" Text="Quantity.."></asp:Label>
                    </td>
                    <td width="250px">
                        <asp:TextBox ID="txt_InvoiceItemQuantity" runat="server" MaxLength="100" 
                            Width="190px" autocomplete="off"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td class="style2">
                        <asp:Label ID="lbl_InvoiceItemPrice" runat="server" Text="Price.."></asp:Label>
                    </td>
                    <td width="250px">
                        <asp:TextBox ID="txt_InvoiceItemPrice" runat="server" MaxLength="100" 
                            Width="190px" autocomplete="off"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td class="style2">
                        <asp:Label ID="lbl_InvoiceItemIsSupplied" runat="server" Text="Supplied.."></asp:Label>
                    </td>
                    <td>
                        <asp:CheckBox ID="chk_InvoiceItemIsSupplied" runat="server"/>
                    </td>
                </tr>
                <tr>
                    <td class="style2">
                        <asp:Label ID="lbl_InvoiceItemCost" runat="server" Text="Cost.."></asp:Label>
                    </td>
                    <td width="250px">
                        <asp:TextBox ID="txt_InvoiceItemCost" runat="server" MaxLength="100" 
                            Width="190px" autocomplete="off"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td class="style2">
                        &nbsp;</td>
                    <td align="right">
                        <asp:ImageButton ID="btn_InvoiceItemSave" runat="server" 
                            ImageUrl="~/Images/btn_save.png" onclick="btn_InvoiceItemSave_Click" />
                        &nbsp;<asp:ImageButton ID="btn_InvoiceItemCancel" runat="server" 
                            ImageUrl="~/Images/btn_cancel.png" onclick="btn_InvoiceItemCancel_Click" CausesValidation="false" />
                    </td>
                </tr>
            </table>
        </asp:View>
    </asp:MultiView>

В Page_Load ничего нет для внутреннего контроля пользователя, он инициализируется извне вызовами для установки InvoiceId и PopulateGrid.

1 Ответ

2 голосов
/ 22 декабря 2011

Это довольно странно. После дальнейшего расследования я обнаружил, что кто-то реализовал это решение для решения проблемы http://couldbedone.blogspot.com/2007/08/restoring-lost-focus-in-update-panel.html

<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Path="~/Resources/Focus.js" />
    </Scripts>
</asp:ToolkitScriptManager>

Решением моей проблемы было удаление ссылки на этот JS из ScriptManager на странице ASPX хостинга.

...