2009-05-19 22 views
2

該場景...我有一個ajax面板上的動態超鏈接控件列表,該列表直接鏈接到位於共享上的WORD文檔。點擊任何鏈接打開WORD客戶端(我設置文件關聯這樣做,所以IE瀏覽器不會嘗試打開它)。需要ajax中點擊動態超鏈接控件的回發句柄

LinkBut​​tons將不起作用,因爲它不會從瀏覽器直接鏈接到文檔,而且我也不需要服務器自動化或activex,因爲我希望每個客戶端都可以使用自己的框打開文檔,如果他們只是簡單地點擊了文件本身。

但是我需要在圖片控件中點擊超鏈接來更改圖片。換句話說,我需要將鏈接放在控件的頂部,這會導致回發,所以我可以獲取發佈控件ID並執行我的操作。我也試圖避免客戶端腳本,儘管我確信可能有一種複雜的方式來做到這一點。

以下是創建動態鏈接的循環中的代碼。我開始只是超鏈接控制,那麼這個代碼與添加一個超鏈接的標籤搞亂,這就是爲什麼它的顯示,因爲它是:

Label lblWordLink = new Label(); 
HyperLink hrefLetter = new HyperLink(); 
hrefLetter.Text = items.letterName;     
hrefLetter.NavigateUrl = folderForPackageLetters + items.letterName + wordDocExtension; 
hrefLetter.ID = "standardLettersHref_" + items.letterName; 
lblWordLink.Text = "<a href='" + hrefLetter.NavigateUrl.ToString() + "'>" + items.letterName + "</a>" ;     
tRow.Cells[1].Controls.Add(lblWordLink); 

我正在尋找一種方式,讓鏈接打開該文檔並同時回傳。有沒有辦法將鏈接控件分層到另一個控件的頂部,這樣鏈接就會鏈接並且下面的控件會導致回發?

32U

修正:答案給出了線索​​。在服務器上,動態控制創建過程中,我所做的:

HyperLink hrefLetter = new HyperLink(); 
hrefLetter.ID = "standardLettersHref_" + items.letterName; 
hrefLetter.Text = items.letterName;     
hrefLetter.NavigateUrl = folderForPackageLetters + items.letterName + wordDocExtension;        
hrefLetter.Attributes.Add("OnClick", "letterHrefClick('" + items.letterName + wordDocExtension + "')"); 
tRow.Cells[1].Controls.Add(hrefLetter); 

然後客戶端我把一個值到AJAX面板內隱藏的控制被點擊超鏈接控件時,被迫提交:

function letterHrefClick(link) { 
    //alert(link); 
    form1.hdnLetterClick.value = link; 
    form1.submit(); 
} 

提交後,回到服務器端,我在Page_Load事件得到的值:

string x = hdnLetterClick.Value; 

真好!

更新... 一個更好的方法來做到這一點...在JavaScript回發使用:

__doPostBack("hdnLetterClick", "somevalue"); 

然後在Page_Init代碼隱藏,你可以做(​​不是按鈕或imgbutton):

string postbackControlID = Request.Params.Get("__EVENTTARGET"); 
string postbackArgument = Request.Params.Get"__EVENTARGUMENT"); 

得到你需要的東西。如果處理動態控制,這樣可以更好地控制娛樂狀態。

+0

你能更好地標記問題嗎? (是asp還是什麼?) – Kornel 2009-05-19 21:55:19

+0

它是asp.net與ajax。我想我想在asp.net將隱含的問題與阿賈克斯。現在看不到地方添加標籤。 – 32U 2009-05-19 22:07:33

回答

1

如果您爲鏈接指定onclick屬性,那麼在選擇鏈接時還應該執行這些javascript操作。