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.

Signature
Nathan Sokalski
njsokalski@hotmail.com
http://www.nathansokalski.com/
chenhong - 31 Jul 2007 05:43 GMT
OnClientClick isn't a bindable property.
you should build OnClientClick string in ImageButton's load event.
Hope this will help.
"Nathan Sokalski" <njsokalski@hotmail.com> дÈëÏûÏ¢ÐÂÎÅ:uJh2l8w0HHA.4712@TK2MSFTNGP04.phx.gbl...
>I have the following tag in one of my DataList's ItemTemplates:
>
[quoted text clipped - 23 lines]
> 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.
Teemu Keiski - 01 Aug 2007 18:42 GMT
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

Signature
Teemu Keiski
AspInsider, ASP.NET MVP
http://blogs.aspadvice.com/joteke
http://teemukeiski.net
> OnClientClick isn't a bindable property.
> you should build OnClientClick string in ImageButton's load event.
[quoted text clipped - 30 lines]
>> the error says the problem is in this line, so what's the problem?
>> Thanks.
Teemu Keiski - 01 Aug 2007 18:44 GMT
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.

Signature
Teemu Keiski
AspInsider, ASP.NET MVP
http://blogs.aspadvice.com/joteke
http://teemukeiski.net
> OnClientClick isn't a bindable property.
> you should build OnClientClick string in ImageButton's load event.
[quoted text clipped - 30 lines]
>> the error says the problem is in this line, so what's the problem?
>> Thanks.