Мой вопрос в том, есть ли способ изменить URL-адрес, не обновляя всю веб-страницу при нажатии на гиперссылку из отчета SSRS?Как изменить URL-адрес и избежать обновления всей страницы при нажатии на гиперссылку из отчета SSRS
Я попробовал 2 разных реализации гиперссылке SSRS отчеты RDLC, которые указаны здесь: SSRS: How to display a hyperlink in sql services reporting
первого Way Свойство TextBox> Действие панель> Перейти к кнопке URL радио> Выбранный URL: HTTP:// локальный: (порт)/#/Путь/ViewDetails
второй Way Создать Заполнитель> Щелкните правой кнопкой мыши> Свойства заполнителя> Общие Pane> На тип разметки: HTML - Интерпретировать HTML-теги в стили> Значение: = "< A HREF = "HTTP: // локальный (порт)/#/Путь/ViewDetails"> Просмотреть подробности </а>"
У меня есть проект MVC который использует AngularJS и реализовал локальный режим обработки SSRS 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 в IFrame в качестве MVC частичного вида.
ViewDetail.cshtml
<div>
<iframe src="{{report.viewDetailPath}}"></iframe>
</div>
viewDetail.js (AngularJS Controller)
angular.module('project').controller("ViewDetailCtrl", function($scope){
$scope.report = {
id: // some guid,
viewDetailPath: '/Reports/ReportViewer';
}
}
У меня есть отчет RDLC с гиперссылкой "View Detail".
Я хочу, чтобы мое приложение вел себя как приложение с одной страницей. Когда я нажимаю ссылку «Посмотреть детали» из отчета, вместо обновления всей страницы, это приведет только к изменению URL-адреса и выполнению javascript-метода от контроллера AngularJS.
Я также внедрил $ routeProvider of AngularJS, чтобы выглядеть как одностраничное приложение.
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.
Я попробовал ваше предложение. Я предположил, что в вашем примере - это гиперссылка в моем отчете SSRS. то я поместил функцию javascript в свой ReportViewer.aspx. У меня есть исключение. Сначала был загружен javascript, и он не смог найти идентификатор элемента testid, поскольку отчет SSRS еще не загружен. – chary