В MVC, почему свойство routeValues ​​в RedirectToAction () не принимает мой класс в качестве аргумента? - PullRequest
0 голосов
/ 16 декабря 2011

Итак, вот в чем дело, я хочу иметь возможность экспортировать любые перечисляемые предметы в 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" });
}

А вот мой метод совместного использования ExportToExcel Action:

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 ]

0 голосов
/ 16 декабря 2011

Причина в том, что результат RedirectToAction запустит запрос GET , и ваши параметры должны будут быть переданы через строку запроса.Очевидно, есть ограничение на количество символов, из которых может состоять URL-адрес .

. Мне кажется, вам следует выполнить преобразование в Excel в классе, а не за другим действием.

Итак CustomExportAction1 и CustomExportAction2 оба вызывают

return File(ExcelExporter.ExportExcel(dataToExport));

или что-то подобное.

0 голосов
/ 16 декабря 2011

попробуйте переключить свою подпись ExportToExcel на

public ActionResult ExportToExcel(FormCollection data)
{
  var model = new ExportToExcelModel();
  try
  {
    UpdateModel(model, data)
  }
  catch(UpdateModelException ex)
  {
  }
}

, посмотрите, что находится в FormCollection (это может помочь), а также посмотрите, генерирует ли UpdateModel исключение, потому что это то, что происходит за видимымкогда вы заставляете ваш метод действия использовать модель вместо FormCollection.

Надеюсь, что это поможет вам выследить его

ОБНОВЛЕНИЕ: Возможно, вам придется сделать это с помощью TempData, прочитайте это , возможно, вы не можете сделать это из коробки с ASP.NET MVC !!

...