- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我开发了一个扩展 ListBox 的自定义控件。这个想法是,控件“记住”在客户端发生的对其元素的修改,例如作为 AJAX 请求的结果。
它的工作方式是,控件还呈现一个隐藏输入,而 AJAX 请求的结果存储在隐藏输入中。这是回发的,控件的 LoadPostData() 方法查找隐藏的输入,如果隐藏的输入有数据,则从中创建 ListItem 集合。
这很好用 只要用户从列表框中进行了选择 .如果没有,则不会调用 LoadPostData() 方法,因此不会创建新的 ListItem 集合。 (我已经使用调试器建立了这一点。)
我假设 LoadPostData 方法仅在 POST 数据集合包含与控件的 UniqueID(即 HTML 中的“name”属性)对应的数据时调用。如果用户尚未从列表框中进行选择,则列表框的 UniqueID 的发布数据中不会包含任何内容,并且不会调用 LoadPostData()。那是对的吗?
任何人都可以建议我如何确保我的自定义 ListBox 的 LoadPostData() 方法在每次回发时都被调用,而不管用户是否进行了选择?
提前致谢 - 我真的坚持这个。
大卫
最佳答案
我在这方面有点晚了,但是,仅供将来引用,以下是我如何完成类似的事情……
我的控件是一个使用节点模板的树。我正在处理的问题是如何捕获客户端对节点展开/折叠状态的更改。最终工作的是:
在 CreateChildControls 中,将隐藏字段添加到我的根控件的控件集合中。
protected override int CreateChildControls(IEnumerable dataSource, bool dataBinding)
{
...
_cdExpanded = new HiddenField();
_cdExpanded.ID = "cdExpanded";
this.Controls.Add(_cdExpanded);
...
}
protected override void OnInit(EventArgs e)
{
...
Page.RegisterRequiresPostBack(this);
...
}
public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
...
string cdExpanded = postCollection[_cdExpanded.UniqueID];
...
}
string ToggleScript
{
get
{
return "ToggleNode('" + this.ClientID + "', '" + _TreeRoot.ClientID + "');";
}
}
protected override void Render(HtmlTextWriter writer)
{
...
if (this.HasChildren)
{
writer.AddAttribute("onclick", ToggleScript);
}
...
}
function ToggleNode(nodeID, treeID) {
var cdExpanded = document.getElementById(treeID + "_cdExpanded");
...
}
关于ASP.NET 自定义控件 : when is LoadPostData() called?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211200/
我开发了一个扩展 ListBox 的自定义控件。这个想法是,控件“记住”在客户端发生的对其元素的修改,例如作为 AJAX 请求的结果。 它的工作方式是,控件还呈现一个隐藏输入,而 AJAX 请求的结果
我是一名优秀的程序员,十分优秀!