我有一个在.Net1.1中使用Visual Studio 2008升级到3.5的应用程序。
有一个页面有一个复选框和一个列表框,使用Javascript启用和禁用如果启用我们可以选择列表中的项目,点击按钮后将处理所选项目。
所选项目在.Net 1.1中正常工作但在3.5中没有。我正在提供示例代码,我正面临着这个问题。相同的代码在.Net1.1中工作正常
以下是aspx行
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="ListBox.aspx.cs" Inherits="WebApplication1.ListBox" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>UsageReport</title>
<script language="javascript">
function isAllChecked()
{
var ctrlList = document.getElementById("lstUsers");
var allChecked = document.getElementById("chkAll");
var checked = allChecked.checked;
if (checked) {
ctrlList.disabled = true;
unselectItems();
}
else {
ctrlList.disabled = false;
}
}
function unselectItems()
{
var lstUsers = document.getElementById("lstUsers");
var list = lstUsers;
for (var i = 0; i < list.length; i ++)
{
list[i].selected = false;
}
list.selectedIndex = -1;
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
<table>
<tr>
<td>
</td>
<td>
<asp:CheckBox ID="chkAll" Checked="True" runat="server" />
</td>
</tr>
<tr>
<td>
</td>
<td>
<asp:ListBox ID="lstUsers" runat="server" SelectionMode="Multiple" Enabled="false"></asp:ListBox>
</td>
</tr>
<tr>
<td>
</td>
<td>
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
</td>
</tr>
</table>
</form>
</body>
</html>
以下是CodeBehind的行
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebApplication1
{
public partial class ListBox : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
this.chkAll.Attributes["onclick"] = "isAllChecked();";
lstUsers.DataSource = new string[] { "one", "two", "three" };
lstUsers.DataBind();
}
}
protected void Button1_Click(object sender, EventArgs e)
{
foreach (ListItem li in lstUsers.Items)
{
if(li.Selected)
Response.Write(li.Value);
}
}
}
}
答案 0 :(得分:0)
经过一番研究,问题是ListBox默认是禁用的,因为ASP.Net 3.5不允许将更改提交给禁用控件是根本原因。
通过从ListBox
中删除enabled =“false”,可以解决此问题<asp:ListBox ID="lstUsers" runat="server" SelectionMode="Multiple"> </asp:ListBox>
通过调用正文的javascript onload实现相同的功能
<body onload="isAllChecked()" >
我在这里做的黑客是因为ASP.Net允许对禁用控件进行任何更改,因此在服务器上启用了控件,但是从客户端脚本启用了禁用
我也尝试在表单标签中使用submitdisabledcontrols =“true”但对我没有用