【发布时间】:2015-09-11 07:42:36
【问题描述】:
总结:我有一个 GridView,它的 TemplateField 只包含一个 ASP.NET LinkButton。我的 LinkButton 如下所示:
<asp:LinkButton ID="lbDoc" runat="server" OnClientClick="document.forms[0].target ='_blank';" OnCommand="ProcessRequest" Text='<%# Eval("Title").ToString() %>' CommandArgument='<%# Eval("ID").ToString() %>' />
注意控件的 CommandArgument 和 OnCommand 属性。每个按钮都需要根据 CommandArgument 执行一些服务器端处理,并最终重定向并在新窗口中呈现 PDF。重要提示:我不只是链接到 PDF URL,所以我不能使用超链接控件或简单的锚标记。服务器端处理是关键和必需的。
问题:在运行时,一旦用户单击其中一个链接按钮,PDF 就会根据需要在新窗口中加载,但之后的所有回发也会在新浏览器中加载选项卡/窗口。我有重新查询和重新绑定我的 GridView 的 DropDownLists(带有 AutoPostback) - 如果用户在单击其中一个 LinkButtons 后在这些 DropDownLists 中选择不同的过滤器选项,则结果将在新的浏览器选项卡/窗口中回发。 这就是问题 - 用户最终会看到一堆乱七八糟的选项卡/窗口。
我的尝试用户 Pow-Ian 描述了同样的问题 here,但建议的 Javascript 解决方案对我不起作用。我尝试过像this 这样的纯JavaScript 解决方案,但它也不起作用。它将在结果标签上呈现 target='_blank',但由于某种原因,它不会在新的浏览器选项卡中处理链接。
有什么建议吗?
【问题讨论】:
-
你提到你不能使用锚标签,我有点不清楚,似乎你只依赖commandArgument中的值来生成pdf链接url,所以为什么锚不能制作它?可能是这样的:" target="_blank">Loading in new window,事件中的逻辑处理程序 ProcessRequest 可以移植到 pdf.aspx。我错过了什么吗?
-
Kane - 不幸的是,我不“仅依靠 commandArgument 的值来生成 pdf 链接 url”。正如我所说,我不只是链接到 PDF URL。服务器端处理是关键。在将 PDF 流式传输 到浏览器之前,我正在执行几个服务器端操作。此外,我不希望用户能够按照您的建议使用查询字符串参数共享或收藏链接。
-
应该有很多方法来保护URL,例如在URL中添加一个15分钟过期的token作为参数,这样即使URL对用户可见,他也可以不要简单地在以后使用它。如果所有过程都可以独立于父页面完成,我认为使用锚点仍然可行。
-
感谢Atters。 This suggestion 解决了我的问题。
标签: javascript c# asp.net gridview linkbutton