ModalPopupExtender показывать только при изменении выбранного индекса, а не при нажатии DropDownList? - PullRequest
0 голосов
/ 01 июля 2011

Я сказал в своем последнем вопросе и скажу и в этом, в основном мое имя пользователя отражает мой опыт!

В настоящее время у меня есть страница с 2 списками, один из которых имеет несколько элементов управления в шаблоне InsertItem.

Одним из таких элементов управления, в частности, является DDL, и к нему подключен модальный всплывающий удлинитель. Я хочу запускать MPE только тогда, когда выбрано определенное значение (не индекс). Вот где я до сих пор!

DropDownList ExpenseTypeDDL = 
    (DropDownList) Expenses.InsertItem.FindControl("ExpenseTypeDDL");
int ExpenseType = (Int32.Parse(ExpenseTypeDDL.SelectedValue.ToString()));

if (ExpenseType == 1)
{
    AjaxControlToolkit.ModalPopupExtender mpeMiles = 
        (AjaxControlToolkit.ModalPopupExtender)Expenses.InsertItem.
        FindControl("mpeMiles");
    mpeMiles.Show();
}

Выше приведено содержимое события DDL SelectedIndexChanged. Этот DDL основан на типах расходов, я хочу указать конкретное значение (первичный ключ в дБ), а затем отобразить модальное всплывающее окно, чтобы пользователь мог ввести свой пробег, а затем выполнить другие действия.

Вот мой mpe

<cc1:ModalPopupExtender ID ="mpeMiles" TargetControlID ="ExpenseTypeDDL" 
    runat="server" DropShadow="true" PopupControlID="pnlMiles" 
    BackgroundCssClass="modalBackground" />
<asp:Panel CssClass="modalPopup" ID="pnlMiles" runat="server" 
    Height="170px">
    <div style="padding: 5px; text-align:center">
        <asp:Label ID="lblStart" runat="server">Start location.</asp:Label>
        <asp:TextBox ID="txtLocationStart" runat="server" />
        <asp:RequiredFieldValidator ID="reqLocation" runat="server" 
            ErrorMessage="You must enter a start location" 
            ControlToValidate="txtLocationStart" Display="Dynamic" Text="*" >
        </asp:RequiredFieldValidator>
        <asp:Label ID="lblDestination" runat="server">Destination.</asp:Label>
        <asp:TextBox ID="txtDestination" runat="server" />
        <asp:RequiredFieldValidator ID="reqDestination" runat="server" 
            ErrorMessage="You must enter a destination" 
            ControlToValidate="txtDestination" Display="Dynamic" Text="*" >
        </asp:RequiredFieldValidator>
        <asp:Label ID="lblMiles" runat="server">Please enter your Mileage</asp:Label>
        <asp:RequiredFieldValidator ID="reqMileage" runat="server" 
            ErrorMessage="You must enter your mileage" ControlToValidate="txtMiles" 
            Display="Dynamic" Text="*" ></asp:RequiredFieldValidator>
        <asp:TextBox ID="txtMiles" runat="server" />
        <br />
        <br />
        <asp:Button ID="btnMiles_OK" runat="server" Text="Save" 
            CausesValidation="false" />
        <asp:Button ID="btnMiles_Cancel" runat="server" Text="Cancel" 
            CausesValidation="false"/>
    </div>
</asp:Panel>

В данный момент mpe отображается при нажатии на DDL, но я хочу, чтобы это происходило только для выбранного значения 1.

Может кто-нибудь сказать, что я делаю не так?

ТИА

dotnetnewb

1 Ответ

1 голос
/ 01 июля 2011

Это происходит потому, что вы установили DDL в качестве цели вашего модального расширителя всплывающих окон - поэтому всякий раз, когда целевой индекс изменяется, отображается диалоговое окно.Решение состоит в том, чтобы иметь скрытую кнопку и сделать ее целевым элементом управления для модального расширителя всплывающих окон - если ваш DDL имеет автоматическую обратную передачу как истину, тогда ваш код на стороне сервера проверит выбранный индекс и отобразит диалоговое окно.с точки зрения взаимодействия с пользователем, если у вас нет UpdatePanel на странице, это будет означать изменение DDL, страница обновится и появится диалоговое окно.Вы также можете использовать модальный всплывающий API javascript, чтобы показать / скрыть изменение индекса, выбранного DDL, без выполнения обратной передачи.Например,

$find('mpeMiles').show();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...