Действие работает с POST, но не с GET (строка запроса) - PullRequest
2 голосов
/ 22 марта 2012

Я использовал Action для получения данных отчета в виде объекта JSON, без проблем помещая в него форму с помощью jjuery's ajax.

Но теперь мне нужно возвращать разные типы результатов в зависимости отзначение параметра.Он должен возвращать либо JSON, либо файл Excel (созданный с использованием HTML), либо файл PDF.Итак, я создал вложенный enum в своем классе контроллера для разграничения доступных типов возвращаемых данных.

Но теперь, когда я пытаюсь вызвать действие из URL для генерации файлов, он выдает ArgumentException ссообщение:

The parameters dictionary contains a null entry for parameter 'dataInicio' of non-nullable type 'System.DateTime' for method 'System.Web.Mvc.ActionResult DadosRelatorioResumoLancamentos(System.Nullable`1[System.Int32], System.String, System.DateTime, System.DateTime, TipoResultado)' in 'Imovelweb.Web.Intranet.Controllers.RelatoriosController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.<br> Parameter name: parameters

Тем не менее, параметр dataInicio присутствует в строке запроса:

<a href="http://localhost:32331/Relatorios/DadosRelatorioResumoLancamentos?codFantasia=106&numAp=&dataInicio=21%2F03%2F2012&dataFim=21%2F03%2F2012&tipoResultado=1" rel="nofollow">http://localhost:32331/Relatorios/DadosRelatorioResumoLancamentos?codFantasia=106&numAp=&dataInicio=21%2F03%2F2012&dataFim=21%2F03%2F2012&tipoResultado=1</a>

Я пробовалисходный запрос (который возвращает содержимое JSON) с обоими методами, и он работает с POST, но не с GET (выдается тот же ArgumentException).

Чего мне не хватает?


Вот подпись метода Action:

public ActionResult DadosRelatorioResumoLancamentos(
    int? codFantasia, 
    string numAp, 
    DateTime dataInicio, 
    DateTime dataFim, 
    TipoResultado tipoResultado = TipoResultado.Json
);

А вот перечисление:

public enum TipoResultado
{ 
    Json,
    Excel,
    Pdf
}

1 Ответ

7 голосов
/ 22 марта 2012

У меня была эта проблема, механизм связывания модели ASP.NET MVC по умолчанию анализирует значения QueryString как InvariantCulture, тогда как значения формы POSTed будут анализироваться с использованием CurrentCulture.

Это означает, что в вашем запросе GET он попытается проанализировать 21/03/2012 в американском формате MM / dd / yyyy, что недопустимо. Поскольку ваш параметр dataInicio не имеет значения null, он не сможет указать подходящее значение, поэтому он выдаст ArgumentException.

Здесь есть полное описание / обходной путь: http://weblogs.asp.net/melvynharbour/archive/2008/11/21/mvc-modelbinder-and-localization.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...