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

Posted

技术标签:

【中文标题】如何在 VIEW MVC3 Razor 中显示 webforms 页面 .aspx【英文标题】:How to show webforms page .aspx in VIEW MVC3 Razor 【发布时间】:2013-01-05 11:39:49 【问题描述】:

我的项目是在 MVC3 Razor Tech 中开发的。我的母版页和内容页是使用 Razor MVC3 开发的。我想在我的项目中展示一个 s-s-rS 报表生成器。我在博客中搜索并得知我们无法在 MVC3 Razor 中显示 s-s-rS 报告。 由于我们可以在 MVC3 中使用'webform',因此我们可以显示报告。

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

要求:请帮助我在'VIEW' MVC3 Razor 框架中显示网络表单。即我的项目登录页面是webform。在那个网络表单页面中,我需要显示 s-s-rS 报告

【问题讨论】:

【参考方案1】:

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

假设您有一个名为 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");
       ...
    

****--> 我附上了我的解决方案资源管理器的快照 我的 routes.Mappageroute 代码是 "routes.MapPageRoute("Report", "Report/Summary", "~/Views/Summary/SkillReport.aspx");" 请更改上述文件夹结构的 mapPageRoute。**

中的值是占位符。您不得提供控制者的姓名或在那里报告。当收到请求时,此路由通过将后缀“rptController”添加到 URL 中的控制器值来确定要调用的控制器,以确定将处理请求的控制器的类型名称。 URL 中的 rptName 值决定调用哪个 WebForm.aspx

假设您需要另外两个报告。

    Summary 控制器中,并报告名称 FullNames 在名为 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

在这条路线上我们添加了:

    “report”是这条路由的名字,你可以放任何其他的

    "Report/rptController/rptName" :这是要识别的模式 URL 何时调用您的 Report-WebForm,“报告”作为“键”和 rptController 是控制器的名称。 rptController 将被分配控制器名称。在这种情况下,SummaryrptNameSkillReport

    "~/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) 访问报告,需要添加一个链接。一世。 e. :

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

作为最后的评论,我建议在创建 SkillReport.aspx 后进入“设计模式”并从工具箱中拖动报告的控件。这会自动在web.config

中注册所需的值

【讨论】:

希望对您有所帮助。随意添加任何其他问题/更改。 @Mate.. 谢谢.. 我在你的解决方案中更新了其他问题,格式为'-->问题 @Mate.. 我用快照更新了我的问题。请查看并发布答案。谢谢 我应该在控制器中添加什么?由于我收到此错误 - “'~/Views/Report/ReportView.aspx' 处的视图必须派生自 ViewPage、ViewPage、ViewUserControl 或 ViewUserControl。” 检查:***.com/questions/18597460/… 和 ***.com/questions/2467808/…【参考方案2】:

答案 #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 
        );

【讨论】:

【参考方案3】:

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

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

让我知道这是否适合你。

更新: 这也可能有帮助,另一个选项看起来像为您的 aspx 页面注册路由。

[*** 帖子] Aspx page in MVC3

【讨论】:

以上是关于如何在 VIEW MVC3 Razor 中显示 webforms 页面 .aspx的主要内容,如果未能解决你的问题,请参考以下文章

在 MVC3 中登录 Razor 视图

MVC3.0 中Razor 学习

MVC3 Razor 和 Modal 弹出窗口

MVC3 razor 获取视图中的浏览器屏幕宽度和高度

带有 Razor 的 MVC3 - 避免在部分视图上定义多个 javascript 函数

使用 MVC3 Razor 在 Jquery 中应用图像扩展验证