我在上一个问题中说过,也会在这个问题中说,基本上我的用户名反映了我的经验!
我目前有一个包含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
答案 0 :(得分:1)
这种情况正在发生,因为您已将DDL设置为模式弹出扩展器的目标 - 因此每当更改目标索引时,都会显示对话框。解决方案是使用隐藏按钮并使其成为模态弹出扩展器的目标控件 - 如果您的DDL具有自动回发为真,那么您的服务器端代码将检查所选索引并弹出对话框。
从用户体验的角度来看,除非您在页面上有UpdatePanel,否则这意味着在DDL更改时,页面将刷新并显示一个对话框。您还可以使用模态弹出式JavaScript API来显示/隐藏DDL选择的索引更改,而不进行回发。例如,
$find('mpeMiles').show();