简单的ASP.NET 应用程序。

我有两下拉的控制。在第一滴下来,我有一个JavaScript onChange 事件。JavaScript使二下拉和删除一个值从它(价值选择在第一个拉下来)。如果他们击空白的第一个值的下拉菜单,然后第二下拉将被禁止(并的选择复位)。

我也有代码 OnPreRender 方法,这将使或禁止的第二次降下来基于价值的首次下降。这使得价值的第一滴下可以选择在代码(载入用户设定)。

我的问题是:

  1. 用户选择的东西在第一次下降。第二下拉将成为通过JavaScript。
  2. 然后,他们改变第三个下,启动后回来。后后后的下拉菜单是在正确的国家(第一数值选择,二下启用)。
  3. 如果他们然后点击,第二个下拉就不再被启用,尽管应该由于有些东西选择在第一个拉下来。

我已经尝试增加一个启动脚本(即将设置的正确状态的第二-下拉)通过 ClientScript.RegisterStartupScript, 然而,当这种被称为第一下拉有一个 selectedIndex0, 没有什么实际的。我的猜测是,值的选择得到设置以后我开始脚本(但还是不叫的 onChange 脚本)。

任何想法什么要尝试?

有帮助吗?

解决方案

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">
    protected void indexChanged(object sender, EventArgs e)
    {
        Label1.Text = " I did something! ";
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Test Page</title>
</head>
<body>
    <script type="text/javascript">
        function firstChanged() {
            if(document.getElementById("firstSelect").selectedIndex != 0)
                document.getElementById("secondSelect").disabled = false;
            else
                document.getElementById("secondSelect").disabled = true;
        }
    </script>
    <form id="form1" runat="server">
    <div>
        <select id="firstSelect" onchange="firstChanged()">
            <option value="0"></option>
            <option value="1">One</option>
            <option value="2">Two</option>
            <option value="3">Three</option>
        </select>
        <select id="secondSelect" disabled="disabled">
            <option value="1">One</option>
            <option value="2">Two</option>
            <option value="3">Three</option>
        </select>
        <asp:DropDownList ID="DropDownList1" AutoPostBack="true" OnSelectedIndexChanged="indexChanged" runat="server">
            <asp:ListItem Text="One" Value="1"></asp:ListItem>
            <asp:ListItem Text="Two" Value="2"></asp:ListItem>    
        </asp:DropDownList>
        <asp:Label ID="Label1" runat="server"></asp:Label>
    </div>
    </form>
    <script type="text/javascript">
        window.onload = function() {firstChanged();}
    </script>
</body>
</html>

编辑:代替整个代码。这种工作应该即使在你的用户控制。我相信,登记册。ClientScriptBlock不工作是因为你的代码写在这块是执行 之前 窗口。加载。而且,我假定(我不知道这一点),DOM对象没有他们的价值观。而且,这就是为什么你得到的属性作为总是0.

其他提示

如果第二次拉最初是通过javascript(我假设这是在一个javascript菜单选择变化,因为你没有指定),然后点击返回键重新载入以前的回发会从未启用。

混合ASP.NET 经典javascript可能毛茸茸的。你可能想看一看ASP.NET's Ajax执行(或第三方AjaxPanel控制,如果你被迫要使用较旧的ASP.NET 版本)。这些会给你的行为你想要通过纯的,没有强迫你去度假村javascript车呀-骗了

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top