我有一些JavaScript来切换ASP.NET页面中的下拉列表,当我单击按钮时会调用它。我喜欢4-5下拉列表/切换按钮对。每个切换按钮都会切换关联下拉列表中的启用/禁用属性。
我保存隐藏字段的禁用属性值,以跟踪回发之间按钮的禁用状态,使用以下javascript
function disableButton(dropdownID)
{
var element = document.getElementById(dropdownID); // get the DOM element
var trackingField = document.getElementById("_tracking" + dropdownID);
if (element) {
trackingField.value = element.disabled;
//sending the element.disabled instead of "!element.disabled" since we are
//setting dropdownlist.enabled property so is already negated for us
element.disabled = !element.disabled; // invert the boolean attribute
}
return false; // prevent default action
}
HTML
<input type="hidden" name="_trackingdropdownlist" id="_trackingdropdownlist" value="true" />
代码
if (Request.Params[_trackingdropdownlist] != null)
{
bool val = true;
bool.TryParse(Request.Params[_trackingdropdownlist], out val);
dropdownlist.Enabled = val;
}
所以下拉列表的状态在第一次回发往返时保持不变,但之后所有的下拉列表都被启用。这里出了什么问题?
*注意:这些下拉列表中的默认启用属性值为false。
答案 0 :(得分:0)
您的隐藏元素不是服务器元素,并且它们的值在回发中丢失。当页面重新加载时,隐藏的元素将使用您指定的值“true”重新创建。当您在第二个回发时检查请求值时,在第一个和第二个回发之间未被修改的所有隐藏元素将包含true。
使它们成为服务器元素,以便您在视图状态中维护所做的任何更改。
答案 1 :(得分:0)
此外,为了帮助跟踪每个回发上发送到服务器的内容,您可以使用FiddlerTool之类的工具来跟踪http请求。您将能够查看请求之间是否丢失了viewstate和hidden表单字段状态。
另外,查看函数“disableButton”的代码,看起来它似乎切换按钮,而不是禁用它本身(给定element.disabled =!element.disabled)。如果你真的想要禁用按钮,你应该包括避免像“A =!A”这样的逻辑,它只会在每次执行语句时在状态之间切换。
因此,如果连线不正确,那么lincolnk的回答将指向正确的方向,否则,我建议您查看您的功能是如何编写的,这样只会在每次其他回发时禁用该按钮。