我的项目是在MVC3 Razor Tech中开发的。我的母版页和内容页是使用Razor MVC3开发的。我想在我的项目中显示SSRS报告生成器。我在博客中搜索并了解到我们无法在MVC3 Razor中显示SSRS报告。
由于我们可以在MVC3中使用'webform'
,因此我们可以显示该报告。
问题:在我的项目中,主页和内容页都是使用Razor开发的.cshtml
因为访问.aspx
很困难。如果我错了,请更正我。
要求:请帮我在'VIEW'
MVC3 Razor框架中显示网络表格。我的项目登陆页面是webform
。在该网页表单页面中,我需要显示SSRS报告
答案 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;我附上了我的解决方案资源管理器的快照 我的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 。
假设您需要其他两份报告。
使用这些参数可以避免为每个报告创建路径。
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
在这条路线上我们添加了:
&#34;报告&#34;是这条路线的名称,你可以把任何其他
&#34;报告/的 {rptController} 强> / {rptName} &#34; :这是要标识的模式URL 何时调用您的Report-WebForm,&#34;报告&#34;作为&#34;关键&#34;和 {rptController} 是控制器的名称。将为rptController分配Controller名称。在这种情况下,摘要和 rptName 与 SkillReport
&#34;〜/查看/的 {rptController} 强> / {rptName} 的.aspx&#34;是物理的 路径。当使用此路线与摘要控制器,并调用 SkillReport 时,这将 调用视图/ 摘要 / 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后输入&#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。
请告诉我这是否适合您。
<强>更新强> 这可能也有帮助,另一个选项就像为您的aspx页面注册一个路径。
[StackOverflow Post] Aspx page in MVC3