我有一个下拉框,用户可以选择是或否,如果用户从下拉列表中选择是,那么我想显示一个显示是或否选项的确认框。如果只有用户在确认框中选择是,那么我想继续调用我的其他功能,该功能对后端数据库进行更新。如果用户在确认框中选择“否”,则我不想继续并取消操作。这是我的下拉代码:
OnSelectedIndexChanged="CheckDropDownSelection"
runat="server" AppendDataBoundItems="true" Height="16px">
<asp:ListItem Text="-- Please Selet --" Value="-- Please Selet --"></asp:ListItem>
<asp:ListItem Text="YES" Value="YES"></asp:ListItem>
<asp:ListItem Text="NO" Value="NO"></asp:ListItem>
</asp:DropDownList>
这是我的代码背后:
protected void CheckDropDownSelection(Object sender, EventArgs e)
{
if (ddl_CloseTask.SelectedValue == "YES")
{
CloseTask();
}
else
{
}
}
protected void CloseTask()
{
// here is where i close the task
}
答案 0 :(得分:3)
阅读我关于其的完整帖子:Calling Server Side function from Client Side Script
这是使用服务器端和客户端代码实现的方法
主要在page_load中附加客户端代码事件
yourDropDownList.Attributes["onChange"] = "jsFunction(this);";
客户端脚本
function jsFunction(mlist){
var myselect = mlist;
if(myselect.options[myselect.selectedIndex].value == "YES")
{
if(confirm("Delete item!"))
{
$.ajax({
type:"POST",
url: window.location.pathname + "/CloseTask";,
data: dataString,
contentType:"application/json; charset=utf-8",
dataType:"json",
error:
function(XMLHttpRequest, textStatus, errorThrown) {
$(errorlableid).show();
$(errorlableid).html("Error");
},
success:
function(result) {
}
}
}
});
}
}
}
服务器端代码
[WebMethod]
protected void CloseTask()
{
//code to close task
}
答案 1 :(得分:1)
代码太多是/否。我希望它不会混淆用户 -
如果用户在 DropDownList 中选择 YES ,系统会提示确认消息。
如果用户在确认消息中选择是, DropDownList 将回发给服务器。
<asp:DropDownList ID="ddl_CloseTask" Width="157px"
AutoPostBack="true"
OnSelectedIndexChanged="CheckDropDownSelection"
runat="server"
AppendDataBoundItems="true" Height="16px">
<asp:ListItem Text="-- Please Selet --" Value="-- Please Selet --"></asp:ListItem>
<asp:ListItem Text="YES" Value="YES"></asp:ListItem>
<asp:ListItem Text="NO" Value="NO"></asp:ListItem>
</asp:DropDownList>
<script type="text/javascript">
var selectlistId = '<%= ddl_CloseTask.ClientID %>',
selectlist = document.getElementById(selectlistId);
selectlist.onchange = function() {
if (selectlist.options[selectlist.selectedIndex].value == "YES") {
if (confirm("Are you sure you want to do this?")) {
__doPostBack(selectlistId, '');
}
}
};
</script>
归功于this answer。
如果用户从确认框中选择否,请将 DropDownList 值设置为第一个值。
<script type="text/javascript">
var selectlistId = '<%= ddl_CloseTask.ClientID %>',
selectlist = document.getElementById(selectlistId);
selectlist.onchange = function() {
if (selectlist.options[selectlist.selectedIndex].value == "YES") {
if (confirm("Are you sure you want to do this?")) {
__doPostBack(selectlistId, '');
} else {
// User selected NO, so change DropDownList back to 0.
selectlist.selectedIndex = 0;
}
}
};
</script>
答案 2 :(得分:1)
您可能希望在DropDownList控件的“onchange”事件中提示用户。您可以在aspx标记或后面的代码中添加对javascript函数的调用。 (在这种情况下,我使用了背后的代码)。
所以,你的代码背后会是这样的:
protected void Page_Load( object sender, EventArgs e )
{
ddl_CloseTask.Attributes.Add("onchange", "return validate(this);");
}
protected void CheckDropDownSelection(object sender, EventArgs e)
{
if (ddl_CloseTask.SelectedValue == "YES")
{
CloseTask();
}
else
{
// do stuff
}
}
private void CloseTask()
{
// do stuff
}
你的aspx标记看起来像这样:
<asp:DropDownList ID="ddl_CloseTask" runat="server" AutoPostBack="True" OnSelectedIndexChanged="CheckDropDownSelection">
<asp:ListItem Text="-- Please Select --" Value="-- Please Select --" />
<asp:ListItem Text="YES" Value="YES" />
<asp:ListItem Text="NO" Value="NO" />
</asp:DropDownList>
<script type="text/javascript">
function validate(ddl) {
var selected = ddl.options[ddl.selectedIndex].value;
if (selected == 'YES' && !confirm('Close the task?')) {
return false;
}
__doPostBack(ddl.id, '');
}
</script>