场景...我在ajax面板上有一个动态超链接控件列表,它直接链接到位于共享上的WORD文档。单击任何链接打开WORD客户端(我设置文件关联,以便IE浏览器不会尝试打开它)。
LinkButtons无法正常工作,因为它没有从浏览器直接链接到doc,我不想要服务器自动化或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 :(得分:1)
如果您为链接指定了onclick
属性,则在选择链接时也应执行这些javascript操作。