該場景...我有一個ajax面板上的動態超鏈接控件列表,該列表直接鏈接到位於共享上的WORD文檔。點擊任何鏈接打開WORD客戶端(我設置文件關聯這樣做,所以IE瀏覽器不會嘗試打開它)。需要ajax中點擊動態超鏈接控件的回發句柄
LinkButtons將不起作用,因爲它不會從瀏覽器直接鏈接到文檔,而且我也不需要服務器自動化或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");
得到你需要的東西。如果處理動態控制,這樣可以更好地控制娛樂狀態。
你能更好地標記問題嗎? (是asp還是什麼?) – Kornel 2009-05-19 21:55:19
它是asp.net與ajax。我想我想在asp.net將隱含的問題與阿賈克斯。現在看不到地方添加標籤。 – 32U 2009-05-19 22:07:33