1

问题:带有 UpdatePanel 和占位符的向导控件的内容页面。UpdatePanel 上方是一个 DropDownList。当用户更改下拉列表中的选择时,我需要在下拉列表下方显示不同的输入控件。当用户在向导控件上单击“下一步”时,我还需要能够从这些动态控件中获取数据。

我知道必须在 OnInit 方法中创建所有动态控件,以便在回发期间从这些控件中获取数据。但是,当触发下拉列表的 SelectedIndexChanged 事件时,将调用 OnInit 方法……然后调用 PageLoad……,最后调用 SelectedIndexChanged 事件的处理程序。ViewState 直到调用 OnInit 和 PageLoad 方法之后才恢复,因此无法知道用户在调用 OnInit 时在列表框中选择了什么......这正是我需要的时候创建动态控件。

那么......你如何解决这个问题?您是否只需要使用 JavaScript 编写整个页面或大部分页面?

提前致谢。

4

2 回答 2

0

对于这种类型的要求,我倾向于使用老式的方法。我会在更新面板中编写所有需要的控件,并将其 Visible 属性设置为 false。然后,在回发时读取下拉列表的状态并将适当的控件 Visible 属性设置为 true。这种方式没有“动态”控件,并且由于没有呈现 Visible 属性为 false 的控件,因此在用户看到它们之前不会下载它们。

于 2010-11-04T17:25:59.000 回答
0

您还可以使用asp:hiddenfield并将值设置为您在心理上创建的 case var。然后在上面运行一个小的 jQuery 脚本来查看

$(document).on("change", "#ddlSelector", setControls);

然后只需创建一个函数,例如:

function setControls(event) { 
    event.preventDefault();
    var selector = hiddenfield.val();
}

那么任何要显示/隐藏的项目都可以通过获取标签来完成:

$("#elementName").css("display", "inline"); 

或显示,无隐藏。我在工作中使用了它,因为有时您需要在不触发回发的情况下进行更改,但在他们使用表单时仍会收集数据。

为了代码的强度和安全性,我通常避免在许多事件中使用 jQuery,但是使用 jQuery 有时可以更容易地操作 DOM 元素。

于 2013-12-06T16:04:15.530 回答