如何在VIEW MVC3 Razor中显示webforms页面.aspx

时间:2013-01-05 11:39:50

标签: asp.net-mvc-3 webforms reporting-services

我的项目是在MVC3 Razor Tech中开发的。我的母版页和内容页是使用Razor MVC3开发的。我想在我的项目中显示SSRS报告生成器。我在博客中搜索并了解到我们无法在MVC3 Razor中显示SSRS报告。 由于我们可以在MVC3中使用'webform',因此我们可以显示该报告。

问题:在我的项目中,主页和内容页都是使用Razor开发的.cshtml因为访问.aspx很困难。如果我错了,请更正我。

要求:请帮我在'VIEW' MVC3 Razor框架中显示网络表格。我的项目登陆页面是webform。在该网页表单页面中,我需要显示SSRS报告

3 个答案:

答案 0 :(得分:9)

我必须这样做,所以我为我工作:

假设您有一个名为摘要的控制器。 对于此实施,您不需要添加或修改您拥有的任何操作。

然后,正如您告诉我的那样,您添加一个名为" 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");
       ...
    }
  
    

**** - &GT;我附上了我的解决方案资源管理器的快照     enter image description here     我的routes.Mappageroute代码是          &#34; routes.MapPageRoute(&#34; Report&#34;,&#34; Report / Summary&#34;,&#34;〜/ Views / Summary / SkillReport.aspx&#34;); < / EM>&#34;     请更改上面文件夹结构的mapPageRoute。**&lt; -

  

{} 中包含的值为占位符。您不得在此处提供控制器的名称或报告。收到请求时,此路由通过添加后缀&#34; rptController&#34;来确定要调用的控制器。到URL中的控制器值,以确定将处理请求的控制器的类型名称。 URL中的 rptName 值确定要调用的 WebForm.aspx

假设您需要其他两份报告。

  1. 摘要控制器中,报告名称​​ FullNames
  2. 在名为产品的控制器中,并且报告名称​​列表
  3. 使用这些参数可以避免为每个报告创建路径。

    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. &#34;报告&#34;是这条路线的名称,你可以把任何其他

    2. &#34;报告/的 {rptController} / {rptName} &#34; :这是要标识的模式URL     何时调用您的Report-WebForm,&#34;报告&#34;作为&#34;关键&#34;和      {rptController} 是控制器的名称。将为rptController分配Controller名称。在这种情况下,摘要 rptName SkillReport

    3. &#34;〜/查看/的 {rptController} / {rptName} 的.aspx&#34;是物理的     路径。当使用此路线与摘要控制器,并调用 SkillReport 时,这将     调用视图/ 摘要 / SkillReport .aspx

    4. 路由文档: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后输入&#34; 设计模式&#34;并且从工具箱中拖动报告的控件。这将自动在 web.config

      中注册所需的值

答案 1 :(得分:3)

答案#1很有用:

只需确保您的MapRoutes订单的顺序正确:

e.g:

 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 }
        );
}

答案 2 :(得分:1)

虽然这不是推荐的做法,但它是可行的。我正在复制一个链接,向您展示如何在同一个项目中使用两个View Engines。

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

请告诉我这是否适合您。

<强>更新 这可能也有帮助,另一个选项就像为您的aspx页面注册一个路径。

[StackOverflow Post] Aspx page in MVC3