2013-09-26 1 views
0

Мой вопрос в том, есть ли способ изменить 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.

ответ

0

Вам нужно будет подключить обработчик событий onclick к ссылкам, о которых идет речь. Этот обработчик onclick может затем предотвратить щелчок, но вместо этого изменить URL-адрес, например. используя функцию углового $ location.update (или устанавливая $ window.location.href в более новых версиях).

Вот документация Угловая о том, как манипулировать URL:. http://docs.angularjs.org/guide/dev_guide.services $ расположение

И здесь очень простой пример такого обработчика событий и как прикрепить его к ссылке. Вы, возможно, придется использовать что-то вроде getElementsByClassname вместо (с петлей) или даже некоторые сложные селектор:

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

Смотреть это работает здесь. Это будет просто предупредить URL щелкнули, но предотвратить браузер от открытия, что URL-адрес: http://jsfiddle.net/eJBfn/

0

Если вы говорите о глубоком связывании в угловых вам нужно использовать #/перед всеми меченым якорем hrefs:

<a href="#/yourpath"></a> 
+0

Я пробовал это, но все же вся страница освежает. Я предполагаю, что отчет SSRS вызывает всю обновленную страницу. Я просто не знаю, как избежать SSRS от этого. – chary

Смежные вопросы