一.同事解決方案:
1.在View文件夾下建立報表文件A,用來作為報表呈現的載體。這個頁面負責加載報表模板與加載數據源。其中報表模板由於后綴名為grf,在MVC中不做任何修改的情況下,系統會做路由處理,提示404錯誤,因此,同事將模板后綴名修改為jpg,得以順利調用。數據源加載,同事的思路是通過aspx頁面實現,具體來說,在aspx頁面中定義ViewData,在controller中對ViewData進行賦值,從而輸出view。總體上是利用了aspx頁面作為數據源呈現頁面,而利用Mvc的controller向這個呈現頁面填充數據實現為報表提供數據源。問同事為何不用cshtml頁面,答曰:會出錯。
二.優化方案:
首先將aspx頁面替換為cshtml頁面,也在其中定義ViewData,發現點擊報表頁面的查詢按鈕,頁面即報錯,IE崩潰。經過與原有頁面數據對比,發現原來是MVC將雙引號進行了轉義所致。因此,調用MVC自帶的Html.Raw方法,阻止其轉義。由此,將aspx頁面問題解決。
利用cshtml頁面,有兩種做法:
1.直接在cshtml頁面定義ViewData,在controller中返回View,但是此時返回的頁面是帶有母版頁的頁面,因此,必須在cshtml頁面中聲明,Layout=null。
2.在cshtml頁面中僅僅定義ViewData,不涉及Layout聲明。在Controller中直接返回PartialView即可。
關於模板文件的后綴名修改問題,更是簡單,在config中,將*.grf文件聲明為靜態文件即可。即添加以下代碼即可解決。
<add name="Static Report" path="*.grf" verb="GET" type="System.Web.StaticFileHandler" />
至此,將報表部分的開發順暢了許多,再也不用煩修改報表模板文件后綴名、aspx頁面等問題了。
更新:
不使用數據源頁面及ViewData,直接通過API返回json數據更簡單。經過測試,完美無誤!