2013-01-05 50 views
6

Dự án của tôi được phát triển trong MVC3 Razor Tech. Trang chủ và trang nội dung của tôi được phát triển với Razor MVC3. Tôi muốn hiển thị một trình xây dựng báo cáo SSRS trên dự án của tôi. Tôi tìm kiếm trong các blog và đến để biết rằng chúng tôi không thể hiển thị các báo cáo SSRS trong MVC3 Razor. Vì chúng tôi có thể sử dụng 'webform' trong MVC3, chúng tôi có thể hiển thị báo cáo.Cách hiển thị trang webform .aspx trong VIEW MVC3 Razor

Sự cố: Trong dự án của tôi, cả trang cái lẫn trang nội dung đều được phát triển bằng Razor .cshtml Vì truy cập .aspx rất khó. Hãy sửa lỗi nếu tôi sai.

Yêu cầu: Vui lòng giúp tôi hiển thị biểu mẫu web trong 'VIEW' MVC3 Razor framwork.i.e Trang đích dự án của tôi là webform. Trong trang biểu mẫu web đó, tôi cần hiển thị báo cáo SSRS

Trả lời

9

tôi phải làm điều đó và vì vậy tôi làm việc cho tôi:

Giả sử bạn có một bộ điều khiển gọi là Tóm tắt. Để thực hiện việc này, bạn không cần thêm hoặc sửa đổi bất kỳ hành động nào bạn có.

Sau đó, khi bạn nói với tôi, bạn thêm một file có tên "SkillReport.aspx" trong quan điểm của bạn một folder

Views/Summary/SkillReport.aspx 

(ban đầu còn lại trong SkillReport.aspx trống hoặc chỉ cần thêm một số văn bản như "báo cáo kỹ năng")

Trong Global.asax:

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

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

**** -> tôi có atta ched ảnh chụp của giải pháp thám hiểm của tôi enter image description here Tuyến đường của tôi.Mã ứng dụng mã là "routes.MapPageRoute (" Report "," Report/Summary "," ~/Views/Summary/SkillReport.aspx "); " Xin hãy đổi các mapPageRoute cho cấu trúc thư mục trên ** < -.

Các giá trị kèm theo trong {}placeholders Bạn không phải cung cấp tên của bộ điều khiển. Khi một yêu cầu được nhận, tuyến này xác định bộ điều khiển nào cần gọi bằng cách thêm hậu tố "rptController" vào giá trị bộ điều khiển trong URL để xác định tên kiểu của bộ điều khiển sẽ xử lý yêu cầu.Giá trị rptName trong URL xác định WebForm.aspx nào để gọi.

Giả sử bạn cần hai báo cáo khác.

  1. Trong Tóm tắt điều khiển, và báo cáo tên FullNames
  2. Trong một bộ điều khiển tên sản phẩm, và báo cáo tên Danh sách.

Sử dụng thông số bạn tránh phải tạo lộ trình cho từng báo cáo.

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 

Mở tuyến đường này chúng tôi đã thêm:

  1. "Báo cáo" là tên của tuyến đường này, bạn có thể đặt bất kỳ khác

  2. "Báo cáo/{rptController}/{rptName} ": Đây là URL mẫu để xác định khi gọi Báo cáo-WebForm của bạn," Báo cáo "hoạt động như" khóa "và {rptController} là tên của bộ điều khiển. rptController sẽ được gán với tên Controller. Trong trường hợp này Tóm tắtrptName với SkillReport

  3. "~/Views/{} rptController/{} rptName .aspx" là đường dẫn vật lý. Khi sử dụng tuyến đường này với Tóm tắt điều khiển, và gọi SkillReport này sẽ gọi để xem/Tóm tắt/SkillReport .aspx

tài liệu Routing: http://msdn.microsoft.com/en-us/library/cc668201(v=vs.100).aspx#url_patterns

Tại thời điểm này bạn có thể xác minh rằng bạn có thể truy cập vào SkillReport.aspx trong môi trường phát triển của mình bằng cách sử dụng:

http://localhost/Report/Summary/SkillReport 

Hoặc có thể tại một số cổng cụ thể ... như

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

Cuối cùng, SkillReport.aspx (như thế này ... kiểm tra 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>  

Với thẻ này

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

bạn đạt được hiển thị đó trong Safari và các trình duyệt khác.

Để truy cập báo cáo từ VIEW (.cshtml) cần thêm liên kết. tôi. e. :

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

Như một lời nhận xét cuối cùng, tôi khuyên rằng sau khi tạo SkillReport.aspx nhập vào "Thiết kế Chế độ" và kéo từ hộp công cụ điều khiển của Báo cáo. Điều này sẽ tự động đăng ký các giá trị cần thiết trong web.config

+0

@Mate .. Tôi đã cập nhật câu hỏi của mình trong giải pháp ur "-><-" –

+0

Tôi hy vọng nó sẽ hữu ích. Vui lòng thêm bất kỳ câu hỏi/thay đổi nào khác. – Mate

+0

@Mate .. Cảm ơn .. Tôi đã cập nhật câu hỏi khác trong giải pháp ur ở định dạng '-> Câu hỏi <-' –

1

Mặc dù đây không phải là thực tiễn được khuyến nghị nhưng có thể thực hiện được. Tôi đang sao chép liên kết chỉ cho bạn cách sử dụng hai Công cụ Xem trong cùng một dự án.

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

Hãy cho tôi biết nếu điều này phù hợp với bạn.

Cập nhật: Điều này cũng có thể trợ giúp, một tùy chọn khác giống như đăng ký tuyến đường cho trang aspx của bạn.

[StackOverflow bài viết]Aspx page in MVC3

2

trả lời # 1 là hữu ích:

Chỉ cần chắc chắn rằng đơn đặt hàng của MapRoutes là theo thứ tự đúng ưu tiên:

ví dụ :

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 } 
     ); 
} 
Các vấn đề liên quan