题
简单的ASP.NET 应用程序。
我有两下拉的控制。在第一滴下来,我有一个JavaScript onChange
事件。JavaScript使二下拉和删除一个值从它(价值选择在第一个拉下来)。如果他们击空白的第一个值的下拉菜单,然后第二下拉将被禁止(并的选择复位)。
我也有代码 OnPreRender
方法,这将使或禁止的第二次降下来基于价值的首次下降。这使得价值的第一滴下可以选择在代码(载入用户设定)。
我的问题是:
- 用户选择的东西在第一次下降。第二下拉将成为通过JavaScript。
- 然后,他们改变第三个下,启动后回来。后后后的下拉菜单是在正确的国家(第一数值选择,二下启用)。
- 如果他们然后点击,第二个下拉就不再被启用,尽管应该由于有些东西选择在第一个拉下来。
我已经尝试增加一个启动脚本(即将设置的正确状态的第二-下拉)通过 ClientScript.RegisterStartupScript
, 然而,当这种被称为第一下拉有一个 selectedIndex
的 0
, 没有什么实际的。我的猜测是,值的选择得到设置以后我开始脚本(但还是不叫的 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车呀-骗了