私の質問は、SSRS レポートからのハイパーリンクがクリックされたときに Web ページ全体を更新せずに URL を変更する方法はありますか?
ここに示されているSSRSレポートRDLCでハイパーリンクの2つの異なる実装を試しました: SSRS:SQLサービスレポートでハイパーリンクを表示する方法
第 1 の方法のテキストボックス のプロパティ > アクション ウィンドウ > URL ラジオ ボタンに移動 > 選択した URL: http:// localhost:(ポート)/#/Path/ViewDetails
第 2 の方法 プレースホルダーを作成する > 右クリック > プレースホルダー プロパティ > 一般ペイン > マークアップ タイプ: HTML - スタイルで HTML タグを解釈する > 値: ="< a href="http:// localhost:(port)/#/Path/ViewDetails ">詳細を表示</a>"
AngularJS を使用し、SSRS Report Viewer のローカル処理モードを実装した MVC プロジェクトがあります。Report Viewer は ASPX ページ (MVC.ViewPage) に実装されました。
ReportViewer.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 にロードします。
ViewDetail.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';
}
}
「View Detail」というハイパーリンクを含む RDLC レポートがあります。
アプリをシングル ページ アプリケーションのように動作させたい。レポートから [View Detail] リンクをクリックすると、ページ全体が更新されるのではなく、URL のみが変更され、AngularJS コントローラーから JavaScript メソッドが実行されます。
シングルページアプリケーションのように見せるために、AngularJS の $routeProvider も実装しました。
app.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());
}
アプリケーションを単一ページ アプリのようにする $routeProvider は、SSRS レポートのハイパーリンクが URL を変更したときに機能しません。