Почему в MVC свойство routeValues в RedirectToAction() не принимает мой класс в качестве аргумента?
Итак, вот в чем дело, я хочу иметь возможность экспортировать любые перечисляемые элементы в Excel:
Вот метод ActionMethod в некоторой области моего приложения, который создает модель "ExportToExcel", затем перенаправляет его в метод действия в другом контроллере, а другой выполняет всю работу форматирования в Excel:
public ActionResult ExportCustomListToExcel()
{
var exportModel = new ExportToExcelModel();
//Here I fill up the model with a dataTable / other file info like
//exportModel.Items = blah blah..
return RedirectToAction("ExportToExcel", "Shared", new { model = exportModel, testString = "test", area = "Shared" });
}
И вот мой Shared ExportToExcel ActionMethod:
public ActionResult ExportToExcel(ExportToExcelModel model, string testString)
{
//PROBLEM IS RIGHT HERE!
// where testString == "test"
// but model == null :(
//Ommited unrelated code
}
Мой ExportToExcel actionMethod получает удар, но где-то по пути мой ExportToExcelModel теряется:(
Примечание: он успешно передает строки, такие как "testString", так что с моей моделью что-то не так?
На всякий случай, ExportToExcelModel это:
public class ExportToExcelModel
{
public ExportToExcelModel() {}
public ExportToExcelModel(string fileName, ItemType itemType, IEnumerable<ExportableToExcelItem> items)
{
this.FileName = fileName;
this.ItemType = ItemType;
this.Items = items;
}
public string FileName { get; set; }
public ItemType ItemType { get; set; }
public IEnumerable<ExportableToExcelItem> Items { get; set; }
}
Заранее спасибо!
В первый раз мне когда-либо нужно было задавать вопрос здесь, так как на каждый другой вопрос, который я когда-либо встречал, я уже ответил здесь:)
РЕДАКТИРОВАТЬ: Публикация результатов FormCollection:
http://imageshack.us/photo/my-images/861/sinttulonsa.png Извините, новички не могут публиковать фотографии:(
2 ответа
Причина в том, что результат RedirectToAction запустит GET-запрос, и ваши параметры должны быть переданы через строку запроса. Очевидно, что существует ограничение на количество символов, из которых может состоять URL.
Сдается мне, что вы должны сделать преобразование в Excel в классе, а не за другим действием.
Так CustomExportAction1
а также CustomExportAction2
оба звонка
return File(ExcelExporter.ExportExcel(dataToExport));
или что-то подобное.
Попробуйте переключить вашу подпись ExportToExcel на
public ActionResult ExportToExcel(FormCollection data)
{
var model = new ExportToExcelModel();
try
{
UpdateModel(model, data)
}
catch(UpdateModelException ex)
{
}
}
посмотрите на то, что находится в FormCollection (это может помочь), а также посмотрите, генерирует ли UpdateModel исключение, потому что это то, что происходит за увиденным, когда вы заставляете свой метод действия принимать модель вместо FormCollection.
Надеюсь, что это поможет вам выследить это
ОБНОВЛЕНИЕ: Возможно, вам придется сделать это с помощью TempData, прочитайте это, возможно, вы не можете сделать это из коробки с ASP.NET MVC!!