Как сохранить параметры для xtraReport с набором данных в качестве источника данных

1

У меня есть 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()

Данные должны сохраняться через частичное как для загрузки заметки для просмотра, так и для функции экспорта.

Что я делаю неправильно, или есть еще один лучший способ сделать это?

Спасибо, Дэйв К.

Теги:
asp.net-mvc-5
devexpress
xtrareport

1 ответ

1
Лучший ответ

Объект settings.CallbackRouteValues сообщает DocumentViewer, где запрашивать фактический отчет, и он может принимать параметры. К сожалению, это будет отдельный запрос, поэтому вы не можете отправить свою модель, а только простые значения, которые могут быть переданы как строки. В этом примере они используют настраиваемую модель для отчета, но модель должна быть воссоздана из необработанных значений в каждом действии.

Если вы преобразуете свое частичное действие для получения целочисленных параметров:

public ActionResult _SubsequentVisitReport(int noteType, int noteId)

вы должны уладить эти аргументы в конце CallbackRouteValues:

settings.CallbackRouteValues = new { Controller = "Reports", 
                                     Action = "_SubsequentVisitReport",
                                     noteType = model.noteType,
                                     noteId = model.noteId};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню