c# - 用户控件事件处理程序在回发时丢失

标签 c# asp.net postback user-controls webforms

我有一个名为 LeftMenu 的菜单用户控件,它有一个链接项的项目符号列表。它在 ascx 页面上是这样的:

<asp:BulletedList ID="PublisherList" DisplayMode="LinkButton" OnClick="PublisherList_Click" cssClass="Menu" runat="server"></asp:BulletedList>

我在 if(!isPostBack)

下的 page_load 中对列表进行数据绑定(bind)

我在加载控件的页面上遇到问题。当页面首次加载时,事件处理程序将触发。但是,当页面回发时它不再触发,在 IE8 中,当我调试时,我在 Visual Studio 中得到“Microsoft JScript 运行时错误:预期对象”指向“__doPostBack('LeftMenu$PublisherList','0') ”在 FF 中我没有收到错误,但什么也没有发生。我动态加载控件,它是使用以下方法加载到 aspx 页面上的:

<%@ Register TagPrefix="Standards" TagName="LeftMenu" Src="LeftMenu.ascx" %>

<Standards:LeftMenu ID="LeftMenu" runat="server"/>

关于我在哪里丢失事件处理程序的任何想法?

我刚刚意识到这也发生在我拥有的另一个用户控件上。一个文本框和一个按钮,我使用默认按钮来确保按下回车键使用该按钮。 .Net 将 html 中的内容转换为:

 <div id="SearchBarInclude_SearchBar" onkeypress="javascript:return WebForm_FireDefaultButton(event, 'SearchBarInclude_QuickSearchButton')">

因此,只要我在框中输入一个键,我就会在“预期对象”这一行收到 javascript 错误。这两个问题似乎是相关的。

再次编辑:我想我需要澄清一下。这不是我点击菜单项,它在回发时找不到所选项目。我有这个带有左侧导航的搜索页面,然后页面的主要内容是导致回发的内容。此回发一切正常。一旦该页面被回发,现在如果我单击左侧导航中的项目符号列表,我会收到 javascript 错误并且失败。从未调用 LeftMenu 控件的 page_init。

最佳答案

听起来您可能会失去点击,因为您没有对 PostBack 上的列表进行数据绑定(bind)。因此,回发试图引用不存在的控件(特定项目符号列表项)。

您应该尝试在 PostBack 上再次绑定(bind)列表,看看是否能解决您的问题。但是,真正应该发生的是 LeftMenu 和 BulletedList 应该将它们的信息存储到 ViewState 中,以便您可以确保在初始页面加载时向用户显示的数据与 PostBack 正在处理和使用的数据相同.

关于c# - 用户控件事件处理程序在回发时丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1260163/

相关文章:

c# - 合并两组相同的实体

c# - DateTime.ToString 删除斜线

C# 指针上的指针

asp.net - 如何在asp.net中的数字之间插入斜线?

asp.net - 在 Web 用户控件中将 int 数组作为参数传递

javascript - 引用错误 : Can't find variable: WebForm_DoPostBackWithOptions

c# - 使用实现所需返回类型的返回类型实现接口(interface)

jquery - 为什么在我的 jQuery 中获取下一个 'div' 不起作用?

使用 jQuery 进行 ASP.NET 回发?

javascript - 确认回发 OnClientClick 按钮 ASP.NET