ModalPopupExtender仅显示选定的索引更改事件,而不是单击DropDownList?

时间:2011-07-01 09:40:49

标签: asp.net drop-down-menu modalpopupextender

我在上一个问题中说过,也会在这个问题中说,基本上我的用户名反映了我的经验!

我目前有一个包含2个列表视图的页面,其中一个在InsertItem模板中有许多控件。

其中一个控件特别是DDL,我有一个Modal Popup Extender连接到它。我想仅在选择特定值(而不是索引)时才触发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 基于费用类型,我想要定位一个特定的值(db主键),然后显示模态弹出窗口,这样用户就可以输入他们的里程数,然后再做一些其他的事情。

这是我的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>

当点击DDL时,mpe显示,但我希望仅在选定的值1时发生。

有人可以告诉我我做错了吗?

TIA

dotnetnewb

1 个答案:

答案 0 :(得分:1)

这种情况正在发生,因为您已将DDL设置为模式弹出扩展器的目标 - 因此每当更改目标索引时,都会显示对话框。解决方案是使用隐藏按钮并使其成为模态弹出扩展器的目标控件 - 如果您的DDL具有自动回发为真,那么您的服务器端代码将检查所选索引并弹出对话框。

从用户体验的角度来看,除非您在页面上有UpdatePanel,否则这意味着在DDL更改时,页面将刷新并显示一个对话框。您还可以使用模态弹出式JavaScript API来显示/隐藏DDL选择的索引更改,而不进行回发。例如,

$find('mpeMiles').show();