从ASPX传递多个Eval()到JavaScript函数

3
我正在尝试从.aspx文件传递多个Eval()参数到JavaScript函数中,但我不断收到编译器错误。我是JavaScript新手,以前从未真正使用过Eval()。我错在哪里? NB:下面显示的行实际上都在一行上,但为了清晰起见在此处换行:
<asp:LinkButton runat="server" Text='<%#Eval("Title")%>'
    OnClick='javascript:ShowEventDetails'
    CommandArgument='<%#
        Eval("EventID").ToString()          & Eval("Title").ToString() &
        Eval("Location").ToString()         & Eval("StartTime").ToString() &
        Eval("Description").ToString()      & Eval("Link").ToString() &
        Eval("ContactFirstName").ToString() & Eval("ContactLastName").ToString() &
        Eval("ContactEmail").ToString()     & Eval("InsertionTime").ToString() &
        Eval("EventAdmin").ToString()%>); ' />

有更好的方法吗?如果有,它们是什么?


请告诉我我提供的答案是否有帮助到您。 - George Stocker
4个回答

1

OnClick是控件上的一个属性,它期望一个事件处理程序方法的引用。在OnClick属性中放置JavaScript将不起作用。

如果您想在单击按钮时执行任意JavaScript,请使用OnClientClick。我假设您想将evals作为参数传递到ShowEventDetails中(格式化以便阅读):

<asp:LinkButton ID="LinkButton1" runat="server" Text='<%# Eval("Title")%>' 
    OnClientClick='ShowEventDetails("<%# Eval("EventID").ToString() %>",
        "<%# Eval("Title").ToString() %>",
        "<%# Eval("Location").ToString() %>",
        "<%# Eval("StartTime").ToString() %>",
        "<%# Eval("Description").ToString() %>",
        "<%# Eval("Link").ToString() %>",
        "<%# Eval("ContactFirstName").ToString() %>",
        "<%# Eval("ContactLastName").ToString() %>",
        "<%# Eval("ContactEmail").ToString() %>",
        "<%# Eval("InsertionTime").ToString() %>",
        "<%# Eval("EventAdmin").ToString() %>");' />

基本上你正在构造一个长字符串:

ShowEventDetails('123','Event Title','New York' ... etc ...

当 LinkButton 被点击时,JS 中执行的代码。


感谢您的回复。编译器现在抱怨服务器标记格式不正确。 - Dhruv
@Dhruv,使用这种构建参数的方法有点容易出错,因为语法错误的地方太多了。我重新做了一遍,并验证了它的有效性。 - Rex M
1
@Rex 谢谢。 这是我从页面源代码中获取的内容。你还认为我们能够解决这个问题吗? <a onclick="ShowEventDetails("<%# Eval("EventID").ToString() %>", "<%# Eval("Title").ToString() %>", 等等。 - Dhruv

0

最好的方法是在代码后端设置OnClientClick属性,如下所示:

LinkButton lb = new LinkButton(); //Instantiate the linkbutton wherever you need to

一旦你这样做了,使用String.Format将你的项目放入OnClientClick属性中。

lb.OnClientClick = String.Format("javascript:ShowEventDetails
( '{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}');", 
  EventID.ToString(), Title.ToString(), Location.ToString(), StartTime.ToString(), 
  Description.ToString(), Link.ToString(), ContactFirstName.ToString(),
  ContactLastName.ToString(), ContactEmail.ToString(), InsertionTime.ToString(),
  EventAdmin.ToString() );

0

从aspx客户端传递多个参数的另一种方法,下面给出了示例代码

如果要传递字符串参数,请使用两个双引号(+ ",""" + Eval("xxx").ToString() + """)

OnClientClick='<%#"javascript:return OpenDetailsPage(" + Eval("xxx").ToString() + ",""" + Eval("xxx").ToString() + """," _
                                                + Eval("xxx").ToString() + "," + Eval("xxx").ToString() + "," + Eval("xxx").ToString() + "," _
                                                + Eval("xxx").ToString() + ",""" + Eval("xxx").ToString() + """,this);"%> '

0

Eval邪恶的,尝试这个能救命的代码

onClick=='<%# string.Format("javascript:ShowEventDetails({0},{1},{2});return false;", Eval("Title"), Eval("Location"), Eval("StartTime")) %>'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接