0

我的问题是,当单击 SSRS 报告中的超链接时,有没有办法在不刷新整个网页的情况下更改 url?

我在 SSRS Report RDLC 中尝试了 2 种不同的超链接实现,如下所示: SSRS:如何在 sql 服务报告中显示超链接

1st Way Textbox Properties > Action pane > Go to URL radio button > Selected URL: http://localhost:(port)/#/Path/ViewDetails

第二种方式 创建占位符>右键单击>占位符属性>常规窗格>在标记类型:HTML-在样式处解释HTML标签>值:=“<a href="http://localhost:(port)/#/Path/ViewDetails ">查看详情</a>"

我有一个使用 AngularJS 并实现了 SSRS Report Viewer 的本地处理模式的 MVC 项目。报表查看器在 ASPX 页面 (MVC.ViewPage) 中实现

报表查看器.aspx

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<SampleProject.Models.ReportInfo>" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
  <head id="Head1" runat="server">
    <title></title>
  </head>
  <body>
    <form id="form1" runat="server">
      <asp:ScriptManager ID="scriptManager" runat="server" ScriptMode="Release"></asp:ScriptManager>
      <rsweb:ReportViewer ID="ReportViewer" runat="server"
            SizeToReportContent="true" AsyncRendering="false" Visible="true"
            ProcessingMode="Local" EnableViewState="true"
            InternalBorderStyle="None" BorderStyle="None" InternalBorderWidth="0"
            KeepSessionAlive="false" >
      </rsweb:ReportViewer>
    </form>
    <script runat="server">
       override protected void OnInit(EventArgs e){
          // some report viewer initialization here
          // some datasource data population code here
       }
    </script>

我将此 ASPX 页面加载到 MVC 部分视图的 IFrame 中。

查看详细信息.cshtml

<div>
  <iframe src="{{report.viewDetailPath}}"></iframe>
</div>

viewDetail.js(AngularJS 控制器)

angular.module('project').controller("ViewDetailCtrl", function($scope){
  $scope.report = {
                     id: // some guid,
                     viewDetailPath: '/Reports/ReportViewer';
                  }
}

我有一个带有超链接“查看详细信息”的 RDLC 报告。

我希望我的应用程序表现得像一个单页应用程序。当我单击报告中的“查看详细信息”链接时,它不会刷新整个页面,只会更改 URL 并从 AngularJS 控制器执行一个 javascript 方法。

我还实现了 AngularJS 的 $routeProvider 以使其看起来像一个单页应用程序。

应用程序.js

project.config(function($routeProvider){
  $routeProvider.
     when('/', {template: 'NYI'}).
     when('/Path/ViewDetails', {controller: 'ViewDetailCtrl', templateUrl: '/Reports/ViewDetail'}).
     otherwise({redirectTo: '/'});
});

ReportsController.cs(MVC 控制器)

public PartialViewResult ViewDetail(){
  return PartialView("~/Views/Reports/ViewDetail.cshtml");
}

public ActionResult ReportViewer(){
  return View("~/Views/Reports/ReportViewer.aspx", new ReportInfo());
}

当 SSRS 报告超链接更改 URL 时,使应用程序像单页应用程序一样的 $routeProvider 不起作用。

4

2 回答 2

0

您需要将“onclick”事件处理程序附加到相关链接。这个 onclick 处理程序可以阻止点击,而是通过例如使用 angular 的 $location.update 函数(或在较新版本中设置 $window.location.href)来更改 URL。

这是关于如何操作 URL 的 Angular 文档:http://docs.angularjs.org/guide/dev_guide.services .$location

这是一个非常简单的此类事件处理程序示例以及如何将其附加到链接。您可能不得不使用 getElementsByClassname 之类的东西(带有循环),甚至是一些复杂的选择器:

function linkclick(e) {
    alert(e.target);
    e.preventDefault();
}
document.getElementById('testid').onclick = linkclick;

看到它在这里工作。它只会提醒单击的 URL,但会阻止浏览器打开该 URL:http: //jsfiddle.net/eJBfn/

于 2013-09-26T03:21:09.300 回答
0

如果您正在谈论角度中的深度链接,您需要在所有锚标签hrefs之前使用#/:

<a href="#/yourpath"></a>
于 2013-09-26T07:31:57.030 回答