列表框Javascript Multtiselect升级到.Net 3.5后无法正常工作

时间:2013-04-26 15:39:59

标签: javascript .net-3.5 listbox upgrade multi-select

我有一个在.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>
                &nbsp;</td>
            <td>
        <asp:CheckBox ID="chkAll" Checked="True"  runat="server" />
            </td>
        </tr>
        <tr>
            <td>
                &nbsp;</td>
            <td>
        <asp:ListBox ID="lstUsers" runat="server" SelectionMode="Multiple" Enabled="false"></asp:ListBox>
            </td>
        </tr>
        <tr>
            <td>
                &nbsp;</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);
            }
        }
    }
}

1 个答案:

答案 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”但对我没有用