7

私のプロジェクトは MVC3 Razor Tech で開発されました。私のマスター ページとコンテンツ ページは、Razor MVC3 で開発されています。プロジェクトで SSRS レポート ビルダーを表示したいと考えています。ブログを検索したところ、MVC3 Razor で SSRS レポートを表示できないことがわかりました。MVC3で使えるので'webform'、レポートを表示できます。

問題: 私のプロジェクトでは、マスター ページとコンテンツ ページの両方がすべて Razor で開発されています。.cshtmlアクセス.aspxが難しいためです。間違っていたら訂正してください。

要件: 'VIEW'MVC3 Razor フレームワークで Web フォームを表示するのを手伝ってください。私のプロジェクトのランディング ページはwebform. その Web フォーム ページで、SSRS レポートを表示する必要があります

4

3 に答える 3

10

私はそれをしなければならなかったので、私は私のために働きました:

Summaryというコントローラーがあるとします。この実装では、持っているアクションを追加または変更する必要はありません。

次に、あなたが私に言ったように、ビューフォルダーに「SkillReport.aspx」という名前のファイルを追加します

 Views/Summary/SkillReport.aspx

(最初は SkillReport.aspx を空白のままにするか、「スキル レポート」などのテキストを追加します)

Global.asax で:

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

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

****--> ソリューション エクスプローラーのスナップショットを添付しました ここに画像の説明を入力 My routes.Mappageroute code is " routes.MapPageRoute("Report", "Report/Summary", "~/Views/Summary/SkillReport.aspx"); " 上記のフォルダ構造の mapPageRoute を変更してください。** <--

{}で囲まれた値はプレースホルダーです。そこにコントローラーまたはレポートの名前を付けてはなりません。リクエストを受信すると、このルートは URL のコントローラの値にサフィックス「rptController」を追加して、リクエストを処理するコントローラのタイプ名を決定することにより、呼び出すコントローラを決定します。URLのrptName値によって、呼び出すWebForm.aspxが決まります。

他に 2 つのレポートが必要だとします。

  1. サマリーコントローラーで、レポート名FullNames
  2. Productという名前のコントローラーで、レポート名はListです。

パラメータを使用すると、レポートごとにルートを作成する必要がなくなります。

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

このルートに以下を追加しました。

  1. 「レポート」はこのルートの名前です。他の任意の名前を付けることができます

  2. "Report/ {rptController} / {rptName} " : これは、Report-WebForm を呼び出すタイミングを識別するためのパターン URL です。"Report" は "キー" として機能し、 {rptController}はコントローラーの名前です。rptController にはコントローラー名が割り当てられます。この場合、SkillReportを使用したSummaryrptName

  3. 「~/Views/ {rptController} / {rptName} .aspx」は物理パスです。このルートをSummaryコントローラーで使用し、 SkillReportを呼び出すと、Views/ Summary / SkillReport .aspxが呼び出されます。

ルーティングのドキュメント: http://msdn.microsoft.com/en-us/library/cc668201(v=vs.100).aspx#url_patterns

この時点で、以下を使用して、開発環境で SkillReport.aspx にアクセスできることを確認できます。

http://localhost/Report/Summary/SkillReport  

または、特定のポートで...のように

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

最後に、SkillReport.aspx (このような... チェック 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>    

このタグで

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

Safari やその他のブラウザーでその表示を実現します。

VIEW (.cshtml) からレポートにアクセスするには、リンクを追加する必要があります。すなわち:

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

最後のコメントとして、SkillReport.aspx を作成した後、「デザイン モード」に入り、レポートのコントロールをツールボックスからドラッグすることをお勧めします。これにより、必要な値がweb.configに自動的に登録されます

于 2013-01-05T12:03:58.913 に答える
3

回答#1は役に立ちました:

MapRoutes の順序が正しい優先順位になっていることを確認してください。

例えば:

 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 }
        );
}
于 2014-04-03T23:34:28.623 に答える
1

これは推奨される方法ではありませんが、実行可能です。同じプロジェクトで2つのViewEngineを使用する方法を示すリンクをコピーしています。

http://weblogs.asp.net/gunnarpeipman/archive/2010/07/29/asp-net-mvc-3-using-multiple-view-engines-in-same-project.aspx

これがあなたのために働くかどうか私に知らせてください。

更新: これも役立つかもしれません。別のオプションは、aspxページのルートを登録するように見えます。

[StackOverflow投稿] MVC3のAspxページ

于 2013-01-05T11:57:19.647 に答える