2013-01-05 13 views
6

Il mio progetto è stato sviluppato su MVC3 Razor Tech. La mia pagina principale e la pagina dei contenuti sono state sviluppate con Razor MVC3. Voglio mostrare un generatore di rapporti SSRS sul mio progetto. Ho cercato nei blog e ho saputo che non possiamo mostrare i rapporti SSRS in MVC3 Razor. Dato che possiamo usare 'webform' in MVC3 possiamo mostrare il rapporto.Come mostrare la pagina web .aspx in VIEW MVC3 Razor

Problemi: Nel mio progetto sia la pagina principale che quella di contenuto sono tutti sviluppati con Razor .cshtml Poiché l'accesso a .aspx è difficile. Correggimi se ho torto.

Requisito: Please help me per visualizzare le webform nel 'VIEW' MVC3 Razor framwork.i.e La mia pagina di destinazione del progetto è webform. In quella pagina web ho bisogno di mostrare il rapporto SSRS

risposta

9

ho dovuto farlo e quindi ho lavorato per me:

Supponiamo di avere un controller chiamato Sommario. Per questa implementazione, non è necessario aggiungere o modificare alcuna delle azioni in corso.

Poi, come mi hai detto, si aggiunge un file denominato "SkillReport.aspx" nelle viste cartella

Views/Summary/SkillReport.aspx 

(inizialmente lasciato in SkillReport.aspx vuoto o semplicemente aggiungere un po 'di testo come "rapporto di abilità")

In Global.asax:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapPageRoute("Report", "Report/{rptController}/{rptName}", "~/Views/{rptController}/{rptName}.aspx"); 
     ... 
    } 

**** -> ho Atta ched l'istantanea della mia soluzione explorer enter image description here My routes.Mappageroute code is "routes.MapPageRoute (" Report "," Report/Summary "," ~/Views/Summary/SkillReport.aspx "); " favore cambia le mapPageRoute per la struttura delle cartelle sopra ** < -.

I valori racchiusi in {} sono segnaposto Non si deve dare il nome del controller. o segnalare lì. Quando viene ricevuta una richiesta, questa rotta determina quale controller invocare aggiungendo il suffisso "rptController" al valore del controller nell'URL per determinare il nome del tipo del controller che gestirà la richiesta.Il valore rptName nell'URL determina quale WebForm.aspx da chiamare.

Supponiamo di aver bisogno di altri due rapporti.

  1. In Sintesi del controller, e riferire nome FullNames
  2. In un controller di nome prodotto, e riportare nome Lista.

Utilizzando i parametri si evita di dover creare un percorso per ciascun report.

routes.MapPageRoute("Report", "Report/{rptController}/{rptName}", "~/Views/{rptController}/{rptName}.aspx"); 


http://localhost/Report/Summary/SkillReport --> /Views/Summary/SkillReport.aspx 
http://localhost/Report/Summary/FullNames --> /Views/Summary/FullNames.aspx 
http://localhost/Report/Product/List   --> /Views/Product/List.aspx 

Su questa rotta abbiamo aggiunto:

  1. "Report" è il nome di questo percorso, si può mettere qualsiasi altro

  2. "Rapporto/{rptController}/{rptName} ": questo è l'URL del pattern per identificare quando richiamare il tuo Report-WebForm," Report "funziona come" chiave "e {rptController} è il nome del controller. rptController verrà assegnato con il nome del controller. In questo caso Sintesi e rptName con SkillReport

  3. "~/Vista/{} rptController/{} rptName aspx" è il percorso fisico . Quando si utilizza questo percorso con Sintesi controller e chiamare SkillReport questo richiamare alla Visualizzazioni/Sommario/SkillReport aspx

documentazione Routing: http://msdn.microsoft.com/en-us/library/cc668201(v=vs.100).aspx#url_patterns

A questo punto si puoi verificare che puoi accedere al tuo SkillReport.aspx nel tuo ambiente di sviluppo usando:

http://localhost/Report/Summary/SkillReport 

O forse ad un certo particolare porta ... come

http://localhost:1057/Report/Summary/SkillReport 

Infine, SkillReport.aspx (come questo ... controlla ProcessingMode ...)

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="SkillReport.aspx.cs" Inherits="XXX.SkillReport" %> 

    <%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
     Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %> 



    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > 

    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head runat="server"> 
     <title></title> 
     <meta http-equiv="X-UA-Compatible" content="IE=100"/> 
    </head> 
    <body> 
     <form id="frmRpt" runat="server"> 
     <div> 
      <asp:ScriptManager ID="sm" runat="server"> 
      </asp:ScriptManager> 
      <rsweb:ReportViewer ID="rpt" runat="server" Width="100%" Height="90%" AsyncRendering="false" ProcessingMode="Local" ShowRefreshButton="false"> 
      </rsweb:ReportViewer> 
     </div> 
     </form> 
    </body> 
    </html>  

Con questo tag

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" > 

si raggiunge quello spettacolo in Safari e altri browser.

Per accedere al report da VIEW (.cshtml) è necessario aggiungere un collegamento. io. e. :

<a href="/Report/Summary/SkillReport" >Show My Report :) </a> 

Come ultimo commento, vi consiglio dopo aver creato SkillReport.aspx entrare in "modalità di progettazione " e trascinare dalla casella degli strumenti controlli del reporting. Questo registrerà automaticamente i valori richiesti in web.config

+0

@Mate .. ho aggiornato le mie domande in soluzione ur "-><-" –

+0

Spero che sarà utile. Sentiti libero di aggiungere altre domande/modifiche. – Mate

+0

@Mate .. Grazie .. Ho aggiornato l'altra domanda nella tua soluzione nel formato '-> Domanda <-' –

2

Risposta # 1 è stato utile:

Basta fare in modo che l'ordine di MapRoutes è nel giusto ordine di precedenza:

esempio :

public static void RegisterRoutes(RouteCollection routes) 
{ 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

      routes.MapPageRoute(
      routeName: "Report/", 
      routeUrl: "Report/{rptController}/{rptName}", 
      physicalFile: "~/Views/{rptController}/{rptName}.aspx" 
     ); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
} 
Problemi correlati