2013-06-21 6 views
0

В настоящее время я пытаюсь передать весь объект в тело CallbackRouteValues. Я попробовал этотDevexpress MVC, передавая объект CallbackRouteValues ​​

@Html.DevExpress.ReportViewer(
    New ReportViewerSettings With { 
     .Name = Model.ReportID, 
     .Report = Model.Report, 
     .CallbackRouteValues = New With {.ReportID = Model.ReportID, .Model = Model, .Controller = "Sales", .Action = "GenerateSalesReceiptPartial"}, 
     .ExportRouteValues = New With {.Controller = "Sales", .Action = "ExportReportViewerPartial", .ReportID = Model.ReportID}, 
     .PrintUsingAdobePlugIn = False 
    } 
).GetHtml() 

и для контроллера я попробовал этот

Function GenerateSalesReceiptPartial(Model As ReceiptModels.View) As ActionResult 

где ReceiptModels.View является классом, но модель не сможет связать себя с классом, в результате пустой объект. Есть ли другой способ передать весь объект на обратный вызов?

Благодаря

ответ

0

ReportViewer использует значение CallbackRouteValues ​​для создания обратного вызова URL. Следовательно, экземпляр модели будет преобразован в строку.

ASP.NET MVC-движок не может анализировать строку и создавать экземпляр класса, если это не простой тип. Чтобы сделать это возможным, создайте потомка TypeConverter, переопределите его методы CanConvertFrom и ConvertFrom и реализуйте преобразование из типа String в тип модели. Назначьте этот преобразователь классу модели с помощью атрибута TypeConverterAttribute.

Класс UrlHelper (используется ReportVirwer для создания обратного URL-адреса), однако, не использует преобразователь типов. Чтобы обработать преобразование из модели в тип String, реализуйте интерфейс IConvertible в классе модели.

+0

Да, я заметил, что он работает как строки запросов, поэтому я использовал Tempdata для хранения сложных данных. Благодарю . – RRttcc1234