私はまだより良い答えを望んでいますが、それまでの間、私の解決策は基準を満たしているようです。これはKendoWebウィンドウを利用します(したがって、理論的にはjQueryを使用して独自のウィンドウを作成できると思います)。パラメータを渡すようにまだ変更していませんが、これは始まりです。また、リダイレクトアクションを保護していないため、現在、ユーザーはソースを表示し、jQueryロードからURLを取得し、そのアドレスに移動して、そこから基になるレポートURLを取得することができます。これをChildActionOnlyとしてマークするか、アクションが自分のウィンドウでのみ使用可能であることを保証するその他の手段を検討します。また、レポートをHTML4.0にレンダリングして、FileResultに詰め込み、その方法でコンテンツをロードできることもわかりました。ただし、レポートは静的HTMLです。
意見:
@(Html.Kendo().Grid(Model)
.Name("IndexGrid")
.Columns(col =>
{
col.Bound(c => c.SchoolYear);
col.Bound(c => c.SubmissionTypeDesc);
col.Bound(c => c.EntityDesc);
col.Bound(c => c.SubmissionDate);
col.Bound(c => c.UserName);
col.Bound(c => c.Certified);
col.Command(c =>
{
c.Custom("Edit")
.Text("View")
.Action("Edit", "Draft");
c.Custom("Preview")
.Click("windowOpen");
c.Custom("Certify")
.Action("Certify", "Draft");
c.Custom("Download")
.Action("DumpExcel", "Draft");
}
).Title("<b>Actions</b>")
.HtmlAttributes(new { style = "width:200px;" });
})
.DataSource(ds => ds.Server()
.Model(model => model.Id(pk => pk.snapshot_id))
)
.Sortable(sort => sort.Enabled(true).SortMode(GridSortMode.MultipleColumn).AllowUnsort(true))
.Reorderable(reorder => reorder.Columns(true))
.Groupable(group => group.Enabled(true))
)
</article>
@(Html.Kendo().Window()
.Name("window") //The name of the window is mandatory. It specifies the "id" attribute of the widget.
.Title("Preliminary Report") //set the title of the window
.LoadContentFrom("Redir", "Reports") //define the Action and Controller name
.Visible(false)
.Iframe(true)
.Resizable()
.Width(750)
.Height(500)
.Scrollable(false)
.Draggable()
.Actions(a =>
{
a.Refresh();
a.Minimize();
a.Maximize();
a.Close();
})
)
<script>
function windowOpen(e) {
e.preventDefault();
var window = $("#window").data("kendoWindow");
window.open();
}
</script>
ReportControllerスニペット:
public ActionResult Redir()
{
return RedirectPermanent("../ASPReports/ReportForm.aspx");
}
ReportForm.aspx:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="~/ASPReports/ReportForm.aspx.cs" Inherits="MyApp.Reports.ReportForm"%>
<%@ Register assembly="Microsoft.ReportViewer.WebForms, Version=11.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" namespace="Microsoft.Reporting.WebForms" tagprefix="rsweb" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title></title>
</head>
<body>
<form id="reportForm" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<rsweb:ReportViewer ID="mainReportViewer" runat="server" SizeToReportContent="true">
</rsweb:ReportViewer>
</div>
</form>
</body>
</html>
ReportForm.aspx.cs(コードビハインド):
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// credentials - could pull from config
var userid = "";
var password = "";
var domain = "";
IReportServerCredentials irsc = new CustomReportCredentials(userid, password, domain);
mainReportViewer.ServerReport.ReportServerCredentials = irsc;
//mainReportViewer.ServerReport.ReportServerUrl =
// new Uri(ConfigurationManager.AppSettings["ReportServerUrl"]);
mainReportViewer.ServerReport.ReportServerUrl =
new Uri("http://localhost/ReportServer");
mainReportViewer.ServerReport.ReportPath = "Path";
mainReportViewer.ProcessingMode = ProcessingMode.Remote;
mainReportViewer.ShowParameterPrompts = false;
mainReportViewer.ShowRefreshButton = false;
mainReportViewer.ShowWaitControlCancelLink = false;
mainReportViewer.ShowBackButton = false;
mainReportViewer.ShowCredentialPrompts = false;
var parametersCollection = new List<ReportParameter>();
//parametersCollection.Add(new ReportParameter("Snapshot", "##", false));
mainReportViewer.ServerReport.SetParameters(parametersCollection);
mainReportViewer.ServerReport.Refresh();
}
}