<asp:BulletedList ID="PublisherList" DisplayMode="LinkButton" OnClick="PublisherList_Click" cssClass="Menu" runat="server"></asp:BulletedList>
我在if(!isPostBack)
中绑定了列表。 我遇到了一个页面加载控件的问题。 当页面首次加载时,事件处理程序会启动。 但是,当页面执行回发时,它不再触发,而在IE8中,在调试时,我会在Visual Studio中看到“Microsoft JScript运行时错误:期望对象”指向“__doPostBack('LeftMenu $ PublisherList','0')”。 在Firefox中,我没有得到任何错误,但什么也没有发生。我没有使用动态加载控件,而是在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错误。似乎这两个问题有关。
再次编辑:我想我需要澄清。不是我点击菜单项,然后在postback时找不到所选项。我有一个带有左侧导航的搜索页面,然后页面的主要内容是引起postback的东西。这个postback很好。一旦页面被postback,现在如果我点击左侧导航中的项目列表,我会得到一个javascript错误并且失败。LeftMenu控件的page_init从未被调用。
话虽如此,在网站上,这是一个左侧导航菜单,因此我怀疑其中只有几项。
显然,如果这是某种数据库调用,则需要将其缓存,这可以帮助保持页面调用的轻盈性并且不需要 ViewState,但是如果缓存过期,则不能保证 PostBack 所操作的列表与用户看到的原始列表是否相同。 - Tony Heupel