转发器中嵌入的代码

时间:2011-09-07 13:13:35

标签: asp.net

我正在使用数据绑定中继器组件,里面有一些点击敏感的面板。

<ItemTemplate>
        <asp:Panel ID="PanelContent" runat="server">
            <asp:Panel ID="PanelMenuTitle" runat="server" 
                ondblclick="EditMenu(<%# Eval("ID") %>)">

如您所见,我想将当前数据项的ID传递给名为EditMenu()的javascript函数。

但是,由于“服务器标签格式不正确”,此代码会中断。我也尝试了我能想到的一切:使用<%=而不是<%#Bind()代替Eval(),而不是“没有成功。”

2 个答案:

答案 0 :(得分:1)

在ondblclick函数周围使用单引号。那应该解决它。见下文。

ondblclick='EditMenu(<%# Eval("ID") %>)'

我的第二个建议是使用另一个控件,如ListView或DataList,以便您可以分配数据键来保存ID。然后你可以像这样在ItemDataBound事件中分配ondblclick事件。

protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem)
    {
        Panel pnlCtrl = (Panel)e.Item.FindControl("Panel1");
        if (pnlCtrl != null)
        {
            pnlCtrl.Attributes["ondblclick"] = String.Format("EditMenu({0})", ListView1.DataKeys[((ListViewDataItem)e.Item).DisplayIndex]["ID"]);
        }
    }
}

答案 1 :(得分:0)

好吧,我明白了。不是最初的方法,但最终它是我想要的:

if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            Panel pnlCtrl = (Panel)e.Item.FindControl("PanelMenuTitle");
            if (pnlCtrl != null)
            {
                myMenu menu = (e.Item.DataItem as myMenu);
                pnlCtrl.Attributes["ondblclick"] = String.Format("EditMenu('{0}')", menu.ID);
            }
        }