通过内容页面上的DropDownList更改动态控件

时间:2010-11-04 17:18:28

标签: asp.net dynamic drop-down-menu updatepanel placeholder

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

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

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

提前致谢。

2 个答案:

答案 0 :(得分:0)

我倾向于使用旧式学校方法来满足此类要求。我会编写更新面板中所需的所有控件,其Visible属性设置为false。然后,在post back上读取下拉状态并将approperate控件Visible属性设置为true。这种方式没有“动态”控件,并且由于Visible属性为false的控件未呈现,因此在用户看到它们之前不会下载它们。

答案 1 :(得分:0)

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

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

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

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

然后,任何要显示/隐藏的项目都可以通过获取标记来完成:

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

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

我通常会为许多事件避免使用jQuery来提高代码和安全性,但使用jQuery时,DOM元素操作有时会更容易。