У меня есть devExpress xtraReport, который поставляется строго типизированным набором данных. Пока я жестко кодирую два параметра в Actions, он загружает данные в набор данных и отображает их в отчете. Как только я попытаюсь заставить его передать значения с главной страницы на частичный, это терпит неудачу. Моя первая попытка состояла в том, чтобы передать параметры через ViewBag, не работала, поэтому переключилась на модель, все еще не работая правильно.
контроллер главной страницы
public ActionResult SubsequentVisitReport(int noteType = 1, int noteId = 9)
{
ViewBag.noteType = noteType;
ViewBag.noteId = noteId;
ReportParameters reportParamters = new ReportParameters();
reportParamters.noteType = noteType;
reportParamters.noteId = noteId;
return View(reportParamters);
}
главная страница cshtml - добавлена в EditorFor, чтобы убедиться, что модель делает это там (это так). Попробовали называть Partial как с помощью, так и без "Моделирования",
@model ReportParameters
@Html.EditorFor(m => m.noteId)
@Html.EditorFor(m => m.noteType)
@Html.HiddenFor(m => m.id)
@Html.HiddenFor(m => m.noteType)
@Html.HiddenFor(m => m.noteId)
@Html.Partial("_SubsequentVisitReport", Model)
контроллер для частичного - это не получает данные от модели, и я не понимаю, почему. Модель НЕ равна нулю, все значения равны 0 (ноль).
[HttpPost]
public ActionResult _SubsequentVisitReport(ReportParameters model)
{
int noteType = model.noteType;
int noteId = model.noteId;
rptSubsequentVisit report = new rptSubsequentVisit();
try { report.DataSource = getSubsequentVisitData(model.noteType, model.noteId).Tables[0]; }
catch { return RedirectToAction("Not_Authorized"); }
ViewData["Report"] = report;
return PartialView("_SubsequentVisitReport");
}
Представление частичного
@model ReportParameters
@Html.HiddenFor(m => m.id)
@Html.HiddenFor(m => m.noteType)
@Html.HiddenFor(m => m.noteId)
@Html.DevExpress().DocumentViewer(settings =>
{
// The following settings are required for a Report Viewer.
settings.Name = "reportViewer1";
settings.Report = (rptSubsequentVisit)ViewData["Report"];
// Callback and export route values specify corresponding controllers and their actions.
// These settings are required as well.
settings.CallbackRouteValues = new { Controller = "Reports", Action = "_SubsequentVisitReport"};
settings.ExportRouteValues = new { Controller = "Reports", Action = "_SubsequentVisitReportExport" };
}).GetHtml()
Данные должны сохраняться через частичное как для загрузки заметки для просмотра, так и для функции экспорта.
Что я делаю неправильно, или есть еще один лучший способ сделать это?
Спасибо, Дэйв К.
Объект settings.CallbackRouteValues
сообщает DocumentViewer, где запрашивать фактический отчет, и он может принимать параметры. К сожалению, это будет отдельный запрос, поэтому вы не можете отправить свою модель, а только простые значения, которые могут быть переданы как строки. В этом примере они используют настраиваемую модель для отчета, но модель должна быть воссоздана из необработанных значений в каждом действии.
Если вы преобразуете свое частичное действие для получения целочисленных параметров:
public ActionResult _SubsequentVisitReport(int noteType, int noteId)
вы должны уладить эти аргументы в конце CallbackRouteValues:
settings.CallbackRouteValues = new { Controller = "Reports",
Action = "_SubsequentVisitReport",
noteType = model.noteType,
noteId = model.noteId};