我使用vb.net在我的asp.net项目也引导4。我在一个模态中有两个下拉列表,当用户从第一个下拉列表中选择一个项目时,第二个列表将被排序。
问题是,当用户从第一个列表中选择时,页面将回发哪个框将模态消失。我尝试使用<asp:UpdatePanel></asp:UpdatePanel>
标签,但它不起作用。
我将感谢任何帮助或建议!下面是我的代码:
<div class="modal fade" id="AddNew" data-backdrop="static" tabindex="-1">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title">Add New</h4>
</div>
<div class="modal-body">
<div class="row pb-3">
<div class="col-lg-6">
<asp:DropDownList ID="DropDownList1" class="browser-default custom-select form-control-sm" runat="server" AutoPostBack="true"></asp:DropDownList>
</div>
<div class="col-lg-6">
<asp:DropDownList ID="DropDownList2" class="browser-default custom-select form-control-sm" runat="server"></asp:DropDownList>
</div>
</div>
<div class="row">
<div class="col-lg-6">
<div class="input-group mb-3 input-group-sm">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fas fa-user"></i></span>
</div>
<asp:TextBox ID="TextBoxName" class="form-control" runat="server" placeholder="User Name..."></asp:TextBox>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-6">
<asp:DropDownList ID="DropDownListGroup" class="browser-default custom-select form-control-sm" runat="server"></asp:DropDownList>
</div>
</div>
</div>
<div class="modal-footer">
<asp:Button ID="ButtonAdd" class="btn btn-primary btn-sm" runat="server" Text="Add" />
</div>
</div>
</div>
</div>
你在这里做不了什么。post回发会导致jQuery失效。UI对话框,ajaxtoolkit弹出窗口,当然还有一个引导对话框。
这意味着你可以弹出一个对话框,让用户选择或点击一些东西?如果用户的选择是导致回发,那么这个动作也可以作为关闭对话框的手段(节省了你编写关闭对话框的代码!!)。
如果你需要像级联组合框这样的东西?
那么我不会使用弹出窗口,而只是使用更新面板,并显示几个对象。
如果你真的想在弹出框中出现级联组合框或其他东西?然后你必须使用JavaScript和ajax调用网页——不允许回发。你可以这样做,但是要做一些额外的工作。所以,我建议你避免这种弹出式的工作,因为你不仅失去了伟大的漂亮的易于使用的按钮代码根和代码背后(为什么asp.net和web表单是如此容易使用的原因!!)。
所以,你得有点创意。你可以把所有的选项放在"div"节,隐藏或显示该节后面的代码。
然后显示/隐藏表单上的区域,输入:
myDiv.Style("Display") = "normal"
隐藏/显示窗体上的区域。因此,在该面板中,我们可以有两个组合框(选择州/省,然后级联到城市选择)。当用户选择了一个城市(和自动回发),然后我们把选择推入文本框,并隐藏div。所有工作只需几行代码,没有jQuery或引导对话框。
一般规则是什么?
弹出一个对话框,用户可以输入数据,勾选一些东西,输入评论,然后点击确定按钮或其他。但那个按钮会进行回发并关闭对话框。这就是设计模式。
如果你从上面打破?然后可以构建对话框表单,但必须将该对话框的任何操作连接为ajax调用。回发会导致整个浏览器页面向上传输到服务器。运行后台代码,更改该页上的任何内容,然后整个页面返回到客户端,然后重新显示。我还应该补充说,web服务器页面现在已经消失了,不存在服务器端,代码中的所有变量等也都消失了。
背后的代码从不与用户交互。它只在这个往返过程中与网页交互,并且只在页面在服务器上的短时间内交互,代码在后台运行。因此,一个post返回将吹掉在该页面上运行的任何JavaScript,因为整个页面传输到服务器,后台代码运行,然后整个页面传输到客户端,浏览器加载页面并开始运行JavaScript。由于post-back将页面发送到服务器,然后将发送整个页面,那么你就不能有post-back运行,并保持你的JavaScript popus等运行,更糟糕的是浏览器重新加载整个页面,JavaScript代码开始再次运行!
如果你真的想这么做?然后你必须进行ajax调用。
规则和设计模式?回发是关闭对话框,您只能拥有或允许一个回发作为"最后的"。对话的动作。如果你打破了这个规则,那么你就不得不手工编写大量的JavaScript和ajax调用。
所以答案是你不能做post back。您可以使用jQuery实现这一点。UI对话框,并在对话框中插入一个框架。所以你把asp.net网页和按钮放在iframe中,但是,在大多数情况下,弹出框会想要与当前页面交互,而iframe并不能让你在所有实际用例中都这样做。
我因此发现,通过改变我的设计模式和假设,你只需要为你的UI设计想出稍微不同的方法,这样一旦完成,你就可以这样做了。
例如,您可能会弹出一个列表供用户选择,然后当用户选择一个值(post back)时,您可能会弹出另一个列表供用户选择。因此,您可以弹出一个列表进行显示,用户选择当然可以是回发(通常是这样)。然后后面的代码可以触发另一个对话框,你可以得到那个输入。