【问题标题】:AjaxControlToolkit HoverMenu issueAjaxControlToolkit HoverMenu 问题
【发布时间】:2010-01-04 14:08:59
【问题描述】:

我有一个 asp:GridView,里面有一些 TemplateFiled,其中一个用于向用户显示 HoverMenu 面板

更详细地说,gridview 显示个人信息,当用户将鼠标悬停在该行上时,会出现一个面板并显示完整信息。

这是模板字段

<asp:TemplateField meta:resourcekey="grdListTemplateFieldID">
                    <ItemTemplate>
                        <asp:HoverMenuExtender ID="HoverMenuExtender" runat="server"
                            PopupControlID="PopupMenu" PopupPosition="Center" OffsetY="30" OffsetX="10" PopDelay="50"
                            HoverCssClass="hoverMenu" >        
                        </asp:HoverMenuExtender>
                        <asp:Panel ID="PopupMenu" CssClass="popupMenu" runat="server">
                            <div id="RequestHoverTitle">
                                <asp:Label ID="lblTitle" runat="server" meta:resourcekey="lblTitle" />
                            </div>
                            <div id="NameContainer">
                                <asp:Label ID="lblFullName" runat="server" SkinID="BoldLabel" meta:resourcekey="lblFullName" />
                                <asp:Label ID="lblReqName" runat="server" SkinID="ListLabel" Text='<%# Eval("Name") %>' />
                                <asp:Label ID="lblReqLastName" runat="server" SkinID="ListLabel" Text='<%# Eval("Family") %>' />
                            </div>

。 .其他一些数据 .

在后面的代码中,我有一个方法可以将 ID(dataKeyname)提供给面板以用于其内部工作

protected void grdList_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        HoverMenuExtender hoverMenu = e.Row.FindControl("HoverMenuExtender") as HoverMenuExtender;

        if (hoverMenu != null)
        {
            e.Row.Attributes["id"] = e.Row.ClientID;
            hoverMenu.TargetControlID = e.Row.UniqueID;
        }
    }

最后一切对我来说都很好

这段代码有两个问题

首先:如果用户退出带有提供的注销链接的页面(在母版页中)将看到

The TargetControlID of 'HoverMenuExtender' is not valid. The value cannot be null or empty.

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Source Error: 

每当我想回发页面时,都会出现此消息(如果发生提交过程,或文件上传,反之亦然

任何帮助appriciated

【问题讨论】:

  • forum.asp.net 可能是解决此类问题的更好地方。因为我之前对 AjaxControlToolkit 有一些疑问,但在 StackOverflow.com 上没有得到很好的反馈

标签: c# asp.net asp.net-ajax ajaxcontroltoolkit


【解决方案1】:

因为我已经在后面的代码中分配了 HoverMenuExtender 的 TargetControlID,所以我没有在 ASP Markup 中分配 targetControlID,

所以我将标记中 HoverMenuExtender 的 targetControlID 设置为 GridView ID 并且问题解决了,

对于即将到来的用户,我应该说您可以将 HoverMenuExtender 的 targetControlID 设置为您喜欢的任何 ID,然后在代码隐藏中设置它,它会使用有效 ID 覆盖您的无效 ID。

【讨论】:

    【解决方案2】:

    尝试使用以下代码包装此代码:

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
      //assign target id
    }
    

    【讨论】:

    • h Brian 我把代码放在了 grdList 的 RoDataBound 事件中。将所有 mycode 放入其中,并且在 if(hoverMenu == null) 条件中使用 tis 但没有任何效果。我在哪里弄错了?或者请告诉我另一个解决方案
    • 好的,这可能需要一些调试;我会尝试暂时禁用该代码/扩展器。然后运行这两个场景(登录/退出),查看 GridVIew 的标记,看看 ID 是否真的为空。此外,如果用户已注销,哪些数据会绑定到该网格?你绑定一个空数据源吗?当没有记录时,该网格是否显示任何数据?
    • 亲爱的布赖恩,已注销的用户没有权限查看列表内容,当 gridview 为 null (我的意思是数据源为 null )时,gridview 不显示任何内容,所以什么都没有显示,但是当用户已登录或尝试回发(提交)页面损坏,
    • 如果gridview为null,并且数据源为null,那么如果没有行被渲染,为什么hovermenuextender还会存在呢?是否有不同的 hovermenuextender 导致问题?或者,视图状态是否重新加载并且重新加载的扩展器没有分配值?也许您需要在 RowCreated 事件中分配值?另外,也许您需要提供一个默认的目标控件 ID,并将其切换为 RowCreated 或 RowDataBOund 中的服务器行的 ID?有几个选项...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-27
    相关资源
    最近更新 更多