2011-09-11 79 views
0

我有一个关于在运行时生成图像的问题,这也是链接。好了,我打算做的是创造一个ImageButton的,然后onClick事件设置的东西,如:访问活动?

window.open('http://www.themagicfinger.com/') 

这意味着它看起来像:

newImage.Click += (window.open('http://www.themagicfinger.com/')); 

但后来我意识到这不起作用,因为它寻找一个匹配事件delagate的方法。

所以我的问题是,这是实现我想要的最好的方式,如果是的话,我该如何使它工作?

我脑海中出现的另一种选择是将图像封装在标签中,但我认为这种方式更好。

感谢

+0

因为打开一个新窗口一个客户端事件,为什么要尝试在服务器端代码中执行此操作?为什么不用JavaScript来做呢? – David

+0

你不能用javascript做,我在问题中解释!事件onClick,查找与对象和eventArgs的方法,你不能喂它的JavaScript。 – TheGateKeeper

+0

我向你保证,即使在JavaScript中的DOM元素上点击,你也可以打开浏览器窗口。实际上,使用客户端脚本是仅用于打开新浏览器窗口的方式。服务器端代码无法告诉客户端这样做。 – David

回答

2

你需要的是OnClientClick

<asp:ImageButton id="ImageButton1" runat="server" OnClientClick="window.open('http://www.themagicfinger.com/'); return false;" ImageUrl="MyButton.png" /> 

此属性是一个字符串,而不是事件,您也可以从后面的代码中分配给它:

ImageButton1.OnClientClick = "window.open('http://www.themagicfinger.com/'); return false;"; 
+0

啊谢谢!我从来不知道这个。他们有什么区别?这个人在客户端工作,并导致回发? – TheGateKeeper

+0

没问题,这不是一件小事 - 花了一些时间在开始时了解它。 “OnClick”属性是“复杂的”,并被转换为复杂的JS代码,从而导致表单提交,因此Post Back .. OnClientClick是按照原样呈现的“简单”字符串属性。 –

0

如果你问如何使用服务器端代码告诉客户端,打开浏览器窗口,你不能。服务器端代码无法告诉客户端这样做。你可以从服务器端代码做的唯一事情是发出客户端来做到这一点。在这种情况下,为什么要使用服务器端代码呢?

使用jQuery例如,您可以将这样的单击事件:

<!-- page header (including loading jQuery), other stuff that's before the image, etc. --> 
<img src="/path/to/image" alt="some text" id="imgOpenWindow" /> 
<!-- the rest of the page --> 
<script type="text/javascript"> 
    $(document).ready(function() { 
    $('#imgOpenWindow').click(function(){ 
     window.open('http://www.themagicfinger.com/'); 
    }); 
    }); 
</script> 

如果由于某种原因,你需要使用一个ImageButton控制这个那么它应该是这样的:

<!-- page header (including loading jQuery), other stuff that's before the image, etc. --> 
<asp:ImageButton run="server" id="imgOpenWindow" ImageUrl="/path/to/image" AlternateText="some text" /> 
<!-- the rest of the page --> 
<script type="text/javascript"> 
    $(document).ready(function() { 
    $('#<%= imgOpenWindow.ClientID %>').click(function(){ 
     window.open('http://www.themagicfinger.com/'); 
    }); 
    }); 
</script> 

但我不确定后回应会有什么样的行为。它可能会覆盖JavaScript处理程序(通过在处理程序执行之前回发)或在窗口打开后回发等。我会认为这种行为是未定义的和不可靠的。但是,如果您不需要按钮回发功能,则Image控件可以解决问题。