【问题标题】:How to set the Hyperlinked url to open in New Window using TextBox Properties of a RDLC Report?如何使用 RDLC 报告的文本框属性将超链接 URL 设置为在新窗口中打开?
【发布时间】:2016-12-01 17:47:32
【问题描述】:

我是 RDLC 报告的新手。

RDLC 报告详情:

我有一个名为“CustomReport.rdlc”的 RDLC 报告。哪个集成到 MVC 应用程序中?考虑一下,此报告参数是姓名、id、薪水和联系方式。每个列都与文本框绑定。我当前的要求是,我从数据库中获取了每个客户的地址并将其存储为“位置”参数。当绑定值到“位置”时,它被存储为“字符串”。

我的要求:

如果用户单击“联系人详细信息”列值,则应打开新窗口,该窗口会下载此人的位置。外汇:谷歌地图服务。

我的实现:

在我们的代码中,我实现了以下代码来为我的报表查看器启用超链接属性。

        if (reportPath.Contains("CustomerReport.rdlc"))
        {
            viewer.LocalReport.EnableHyperlinks = true;
            viewer.HyperlinkTarget = "_blank";

        }

我已将转到 URL 属性值指定为“[位置]”。因为我直接从数据库中获取了 URL。例如Sample Link for the Location。呈现 RDLC 报告后,如果单击“联系人详细信息行值”中的任何一个,链接的 URL 在“相同”页面中打开。这就是问题

我的期望是:

如果我单击行值,则链接的页面或文档应在新页面中打开。

我已经尝试了下面的文本框表达式,以便在新窗口中打开超链接 URL

尝试 1:

1.  "javascript:void(window.open('https:\\www.google.com','_blank'))"

2.   Fields!location.Value ? rs:Command=Render &rc:LinkTarget=_blank

3.  "'" & Fields!location.Value & "'"

4.   " ' "+" ' "+Fields!location.Value + " ' "+" ' "

5.   char(34) & Fields!location.Value & char(34)

6.   '<a href="'+[location]+'" target="_blank"></a>'

尝试 2:

我在控制器上写了一个 ActionResult。这意味着我已将以下 URL 分配给 RDLC 参数位置 ["https://localhost:56743/BaseController/DownloadFile?location=[location]"] 一旦用户点击联系人行,相关的控制器操作方法将被调用。我已将响应写回如下代码:

public ActionResult DownloadFile(string fileName, string filePath)
    {
        string docName = string.Empty;
        string path = string.Empty;
        string download = string.Empty;
        docName = fileName.Length > 0 ? fileName : null;
        path = filePath.Length > 0 ? filePath : null;
        string fileContentType = System.Web.MimeMapping.GetMimeMapping(docName);
        var absolutePath = Server.MapPath("~" + path);
        if (!System.IO.File.Exists(absolutePath)) return RedirectToAction("FileNotFound", "HomeManagement");
        if (!string.IsNullOrEmpty(path))
        {
            download = download + "<script>";
            download = download + "window.open('" + HttpContext.Request.Url.GetLeftPart(UriPartial.Authority) + "/" + path + "')";
            download = download + "</script>";
        }
        return Content(download);
    }

在控制器动作调用之后, 按照我的期望,链接的文档会在新窗口中打开。但是 RDLC 文档被重定向到在预览中显示为空的“超链接 URL”

尝试 3:

我在 RDLC 报告属性的“代码”选项卡中编写了 Visual Basic 中的自定义代码。并在 ContactDetails 属性的 “转到 URL” 文本框中调用该代码。

RDLC 自定义代码:

Module OpenDocument
  public function GetUrl(byVal  FilePath as string) as string
    return ("'"+FilePath+"'")
  End function
End Module

在“转到 URL”中调用该自定义代码:

 =Code.OpenDocument.GetUrl([Fields!location.Value])

但上述尝试不起作用。

预期:

“单击列值后,应下载超链接文档还是在新窗口中打开链接文档?”

谁能给我一个更好的解决方案来解决这个问题?

【问题讨论】:

  • 您正在创建 serviceHub,但随后您启动了集线器。服务器端的 serviceHub 也会调用客户端的 addMessage,但客户端只有 broadcastMessage 的处理程序。
  • 我不需要从客户端向服务器发送任何数据。这就是为什么我只是临时创建了 $.connection.hub.start().function(){}); .我只需要使用信号器来接收。我应该从客户端中删除 $.connection.hub.start() 函数。删除集线器启动后它仅适用于从服务器接收数据吗?
  • 大家好!我无法在堆栈溢出中提出新问题。所以,我修改了现有的问题。
  • 这不是 VBA,Visual Basic 代码看起来像 VB.Net,请修改标记。

标签: c# report rdlc


【解决方案1】:

我已经尝试了以下所有选项并且可以确认它们有效:

  • 选项 1 - 将 href 属性设置为在新窗口中打开链接的 javascript(RDL、RDLC、报告管理器站点)
  • 选项 2 - 为报表查看器控件(RDL、RDLC、报表管理器站点)设置 HyperlinkTarget="_blank"
  • 选项 3 - 在查询字符串中传递 rc:LinkTarget Html 查看器命令(报表管理器站点)

选项 1 - 将 href 属性设置为在新窗口中打开链接的 javascript

它适用于 RDL、RDLC 报告和报告管理器站点。

假设您的报告中有一个Name 字段和一个Url 字段。然后为Name 字段打开Placeholder Properties 窗口,并为其Value 设置以下表达式:

="<a href=""javascript:void(window.open('" & Fields!Url.Value & "'),'_blank')"">" & Fields!Name.Value & "</a>"

还要确保在Markup type 部分中检查Html - Interpret HTML tags as styles

选项 2 - 为报表查看器控件设置 HyperlinkTarget="_blank"

它适用于 RDL、RDLC 报告和报告管理器站点。

使用代码或使用设计器,为报表查看器控件设置HyperlinkTarget="_blank"

<rsweb:ReportViewer ID="ReportViewer1" runat="server" HyperlinkTarget="_blank" ProcessingMode="Remote">
    <ServerReport ReportPath="/Test" />
</rsweb:ReportViewer>

这样,所有链接都将在新窗口中打开。因此,通过打开Placeholder properties,然后在Action 中将其设置为Go to Url 和url 表达式=Fields!Url.Value,轻松将Name 字段设置为超链接就足够了。

选项 3 - 在查询字符串中传递 rc:LinkTarget Html 查看器命令

它适用于报表管理器站点中的 RDL。

您可以添加查询字符串参数rc:LinkTarget=_blank,这是一个 HTML 查看器命令。例如:

http://localhost/Reports/report/MyReport?rc:LinkTarget=_blank

这样,所有链接都将在新窗口中打开。因此,只需打开Placeholder properties,然后在Action 中,将其设置为Go to Url 并将url 表达式设置为=Fields!Url.Value,即可轻松将Name 字段设置为超链接。

【讨论】:

  • 嗨 @Reza,以上 3 个选项在 Internet Explorer 和 Google Chrome 浏览器中都不起作用。
  • @ThiruArasu 我已经全部尝试过了,我可以确认一切正常(否则我没有发布它们)。
  • 在上述选项之间,选项2非常简单。
  • 嗨@Reza,我已经尝试了所有三个选项。但是,如果我点击超链接,链接的文件会在同一页面上打开。不在新标签中。一旦我将超链接目标设置为“_blank”,那也不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 2022-01-05
相关资源
最近更新 更多