gpt4 book ai didi

ASP.NET 自定义控件 : when is LoadPostData() called?

转载 作者:行者123 更新时间:2023-12-04 10:45:14 26 4
gpt4 key购买 nike

我开发了一个扩展 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);
...
}

在 OnInit 调用中
protected override void OnInit(EventArgs e)
{
...
Page.RegisterRequiresPostBack(this);
...
}

在 LoadPostData 中查找帖子集合中与隐藏字段的 UniqueID(不是 ClientID)匹配的值:
public bool LoadPostData(string postDataKey, System.Collections.Specialized.NameValueCollection postCollection)
{
...
string cdExpanded = postCollection[_cdExpanded.UniqueID];
...
}

在各个节点的类中,我有代码来填充切换按钮的 onclick 事件,并调用 JavaScript 函数,该函数将基本控件的 ID 和各个节点作为参数。
    string ToggleScript
{
get
{
return "ToggleNode('" + this.ClientID + "', '" + _TreeRoot.ClientID + "');";
}
}
protected override void Render(HtmlTextWriter writer)
{
...
if (this.HasChildren)
{
writer.AddAttribute("onclick", ToggleScript);
}
...
}

这使得通过 getElementById 查找隐藏字段相当容易:
function ToggleNode(nodeID, treeID) {
var cdExpanded = document.getElementById(treeID + "_cdExpanded");
...
}

JavaScript 然后根据发生的事件的需要修改隐藏字段的值。当我们回到服务器时,我能够解析出这个字段的内容,并在它再次呈现之前根据需要修改控件状态。 (注意:我实际上使用了 3 个隐藏字段来跟踪不同的事件,但概念是相同的)

希望这可以帮助其他人在 future ......

关于ASP.NET 自定义控件 : when is LoadPostData() called?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3211200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com