繁体   English   中英

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

[英]Changing Dynamic Controls via DropDownList on Content Page

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

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

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

提前致谢。

您还可以使用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元素操作。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM