2011-09-11 119 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控件可以解決問題。