Problem with ImageButton.OnClientClick when DataBinding

N

Nathan Sokalski

I have the following tag in one of my DataList's ItemTemplates:

<asp:ImageButton ID="btnViewQuestion" runat="server" BorderWidth="0"
ImageUrl="images/qmark.gif" Height="27px" Width="26px"
OnClientClick="window.open(<%#
DataBinder.Eval(Container.DataItem,"questionid","'viewquestion.aspx?questionid={0}'")
%>,'question','scrollbars=yes,width=630,height=480,location=no,menubar=no,status=no,toolbar=no');"/>

As you can see, my goal is to use the value from the DataBinding Expression
as the first parameter of a JavaScript window.open() method in the
OnClientClick property of an ImageButton. However, when I run the
application using this, I recieve the following error:

Server Error in '/' Application.
--------------------------------------------------------------------------------

Parser Error
Description: An error occurred during the parsing of a resource required to
service this request. Please review the following specific parse error
details and modify your source file appropriately.

Parser Error Message: The server tag is not well formed.


I tried to be careful using the single and double quotes, but I think
everything is correct. Did I do something wrong in this server tag? All my
other DataBinding Expressions work fine when I remove this tag, and the
error says the problem is in this line, so what's the problem? Thanks.
 
C

chenhong

OnClientClick isn't a bindable property.
you should build OnClientClick string in ImageButton's load event.
Hope this will help.
 
T

Teemu Keiski

I agree that its most flexible to do in code, but OnClientClixk can be
databound

<asp:DataGrid ID="DataGrid1" runat="server" GridLines="Both"
BorderWidth="0" AutoGenerateColumns="false">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:Button ID="Button1" runat="server"
OnClientClick='<%# "alert(""" & Cstr(Container.DataItem) & """);return
false;" %>' />
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
Handles Me.Load
Dim ints As New List(Of Integer)
ints.Add(1)
ints.Add(2)
ints.Add(3)

DataGrid1.DataSource = ints
DataGrid1.DataBind()
End Sub

This would alert the integer value on Button click
 
T

Teemu Keiski

To add, the trick is that the databinding expression should span the entire
property e.g "cover" it. That way it works. However, complex kind of script
is best to build in code. With a helper function for example.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,740
Latest member
JudsonFrie

Latest Threads

Top