我在Bootstrap模式中有一个Listbox和一个Textbox。我需要使用列表框中的选定值更新TextBox。我的问题是为了从列表框中获取选择的值我需要进行自动回发。回发导致模态关闭。
以下是完整模式代码:
<div id="modalBillOLMapping" class="modal colored-header" style="display:none" >
<div class="md-content">
<div class="modal-header">
<button type="button" data-dismiss="modal" aria-hidden="true" class="close md-close"><i class="icon s7-close"></i></button>
<h3 class="modal-title">
<asp:Label ID="Label1" runat="server" Text="Field Mapping"></asp:Label>
</h3>
</div>
<div class="modal-body form" style="padding: 0px!important;">
<asp:UpdatePanel runat="server">
<ContentTemplate>
<div class="panel panel-alt3 panel-transparent">
<div class="panel-heading panel-heading-cg">
<button runat="server" type="button" id="btnSaveOLMapping" class="btn btn-alt3" onclick="javascript:CloseModal('modalBillOLMapping');" data-dismiss="modal" onserverclick="btnSaveMapping_ServerClick"><i class="icon s7-check"></i> Save</button>
<button type="button" class="btn btn-alt3 md-close"><i class="icon s7-close"></i> Cancel</button>
</div>
<div class="panel-body" style="height:300px">
<asp:UpdatePanel runat="server">
<ContentTemplate>
<div class="row" style="padding-bottom:5px">
<div class="col-xs-2">
<asp:Label runat="server" ID="lblBillOLMapName" CssClass="text-danger" ToolTip="Name of the current mapping">Map Name</asp:Label>
</div>
<div class="col-xs-4">
<asp:TextBox runat="server" ID="txtBillOLMapName"></asp:TextBox>
</div>
</div>
<table style="width:100%">
<thead>
<tr><th style="width:25%">Quickbooks Field</th>
<th style="width:25%">Charge Item Field</th>
<th style="width:25%">Static Value</th>
<th style="width:25%">Concatenated Value</th>
</tr>
</thead>
<tbody>
<tr>
<td><asp:Label runat="server" ID="lblBillOLDocNumber" CssClass="text-danger" ToolTip="Mandatory Field - Bill reference number" Width="200px">DocNumber</asp:Label></td>
<td><asp:DropDownList ID="ddlBillOLDocNumber" runat="server" AutoPostBack="false" Width="250px" ></asp:DropDownList></td>
<td><asp:TextBox runat="server" ID="txtStaticBillOLDocNumber" Height="25px" Width="250px"></asp:TextBox></td>
<td>
<div class="input-group">
<span class="input-addon input-group-btn">
<asp:TextBox ID="txtConBillOLDocNumber" runat="server" Width="250px" Height="22px" ClientIDMode="Static"></asp:TextBox>
<a class="btn btn-primary dropdown-toggle toggle-menu" data-toggle="dropdown" href="#" style="height:22px">
<i class="icon s7-angle-down" style="font-size:x-large"></i>
</a>
<ul class="dropdown-menu">
<li>
<asp:ListBox runat="server" ID="lbConBillOLDocNumber" ClientIDMode="Static"></asp:ListBox>
</li>
</ul>
</span>
</div>
</td>
</tr>
<tr>
<td><asp:Label runat="server" ID="lblBillOLTxnDate" ToolTip="The date of the bill, if you leave out of the mapping, the current date in Quickbooks Online will be used.">Transaction Date</asp:Label></td>
<td><asp:DropDownList ID="ddlBillOLTxnDate" runat="server" AutoPostBack="false" Width="250px"></asp:DropDownList></td>
<td><asp:TextBox runat="server" ID="txtStaticBillOLTxnDate" Width="250px" Height="22px"></asp:TextBox></td>
<td><div class="input-group" >
<span class="input-addon input-group-btn">
<asp:TextBox runat="server" ID ="txtConBillOLTxnDate" Width="250px" Height="22px"></asp:TextBox>
<a class="btn btn-primary dropdown-toggle toggle-menu" data-toggle="dropdown" href="#" style="height:22px">
<i class="icon s7-angle-down" style="font-size:x-large"></i>
</a>
<ul class="dropdown-menu">
<li>
<asp:ListBox runat="server" ID="lbConBillOLTxnDate" ClientIDMode="Static"></asp:ListBox>
</li>
</ul>
</span>
</div>
</td>
</tr>
<tr>
<td><asp:Label runat="server" ID="lblBillOLPrivateNote" ToolTip="User entered, organization-private note about the transaction. This note will not appear on the transaction records by default.">Private Note</asp:Label></td>
<td><asp:DropDownList ID="ddlBillOLPrivateNote" runat="server" AutoPostBack="false" Width="250px"></asp:DropDownList></td>
<td><asp:TextBox runat="server" ID="txtStaticBillOLPrivateNote" Width="250px" Height="22px"></asp:TextBox></td>
<td><div class="input-group">
<span class="input-addon input-group-btn">
<asp:TextBox runat="server" ID="txtConBillOLPrivateNote" Width="250px" Height="22px"></asp:TextBox>
<a class="btn btn-primary dropdown-toggle toggle-menu" data-toggle="dropdown" href="#" style="height:22px">
<i class="icon s7-angle-down" style="font-size:x-large"></i>
</a>
<ul class="dropdown-menu">
<li>
<asp:ListBox runat="server" ID="lbConBillOLPrivateNote"></asp:ListBox>
</li>
</ul>
</span>
</div></td>
</tr>
</tbody>
</table>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineDescription" ToolTip="Description for the expense line">Line Description</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineDescription" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineAmount" ToolTip="Amount of Expense">Line Amount</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineAmount" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineCustomerRef" ToolTip="Customer name associated with the expense">Line Customer Ref</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineCustomerRef" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineAccountClass" ToolTip="Class associated with the expense">Line Account Class</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineAccountClass" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineAccountRef" ToolTip="Name of the expense account">Line Account Ref</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineAccountRef" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLVendorRef" CssClass="text-warning" ToolTip="Mandatory - Full name of the vendor">Line Account Ref</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLVendorRef" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLAPAccount" ToolTip="The Accounts Payable account the purchase is credited">AP Account</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLAPAccount" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineItemDescription" ToolTip="A descriptive text field for the item">Line Item Description</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineItemDescription" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineItemAmount" CssClass="text-warning" ToolTip="Mandatory - The TOTAL item for the line item">Line Item Amount</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineItemAmount" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineItemRef" CssClass="text-warning" ToolTip="Mandatory - The name of the item purchased">Line Item Ref</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineItemRef" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineItemClass" ToolTip="Class for the line item">Line Item Class</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineItemClass" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineItemQty" ToolTip="Number of items ordered">Line Item Qty</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineItemQty" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineItemUnitPrice" ToolTip="Unit Price of the Item">Line Item Unit Price</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineItemUnitPrice" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
<div class="row" style="padding-bottom:5px">
<div class="col-x-6">
<asp:Label runat="server" ID="lblBillOLLineItemCustomer" ToolTip="Customer associated with the item purchase">Line Item Customer</asp:Label>
</div>
<div class="col-xs-6">
<asp:DropDownList ID="ddlBillOLLineItemCustomer" runat="server" AutoPostBack="false" Width="350px"></asp:DropDownList>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</div>
</div>
</div>
这是我背后的代码:
protected void lbConBillOLDocNumber_SelectedIndexChanged(object sender, EventArgs e)
{
txtConBillOLDocNumber.Text = lbConBillOLDocNumber.SelectedItem.Text;
}
我需要将Listbox中选定的文本值放入TextBox中。我知道我得到正确的值因为上面代码中的警报显示正确的值,(但是由于模态关闭,我不知道文本框是否正在更新。)我需要填充所选值的文本框ListBox,我需要模态保持开放。我意识到我可能正在接近这一切,所以任何建议的改进都是受欢迎的。
答案 0 :(得分:1)
您可以使用以下示例中的AJAX UpdatePanel
来删除每次回发刷新整个页面的要求,并允许为您的案例部分呈现特定区域,这将是模态体。
HTML
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
Launch demo modal
</button>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Modal title</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<%-- AJAX UpdatePanel section--%>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged">
</asp:DropDownList>
<br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div>
</div>
</div>
</form>
背后的代码
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Bind DropDownList1 with some testing data
DropDownList1.Items.Add(new ListItem() { Text = "Item 001", Value = "1" });
DropDownList1.Items.Add(new ListItem() { Text = "Item 002", Value = "2" });
DropDownList1.Items.Add(new ListItem() { Text = "Item 003", Value = "3" });
DropDownList1.Items.Add(new ListItem() { Text = "Item 004", Value = "4" });
DropDownList1.Items.Add(new ListItem() { Text = "Item 005", Value = "5" });
}
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
TextBox1.Text = DropDownList1.SelectedValue;
}
答案 1 :(得分:0)
最终弄明白了这个问题。问题是由显示列表框的下拉菜单引起的。只要在列表框中单击任何内容,下拉菜单就会关闭,并且基本上使选择无效并关闭模式。我不得不停止传播下拉列表。一旦我这样做,UpdatePanel就完成了它的工作。我在下拉菜单中添加了一个ID,并使用以下代码阻止它在单击ListBox时关闭。
$('#myDropdown .dropdown-menu').on({
"click": function (e) {
e.stopPropagation();
}
});
我希望这有助于其他人。快乐的编码。