2012-03-21 15 views
2

JSONオブジェクトとしてレポートのデータを取得するためのアクションを問題なく使用しています。jQueryのajaxでフォームをPOSTしています。アクションはPOSTでは動作しますが、GET(クエリ文字列)では動作しません

しかし、今はパラメータの値によって異なる結果の型を返す必要があります。 JSON、Excelファイル(HTMLで構築されたもの)またはPDFファイルのいずれかを返す必要があります。だから私は使用可能な戻り値の型を区切るために、コントローラクラスに入れ子になった列挙型を作成しました。

しかし、私はファイルを生成するための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.
Parameter name: parameters

それでも、dataInicioパラメータはクエリ文字列に存在します:私は元の要求両方の方法で(WICHがJSONコンテンツを返す)、それがPOSTで動作するが、Nを試みた

http://localhost:32331/Relatorios/DadosRelatorioResumoLancamentos?codFantasia=106&numAp=&dataInicio=21%2F03%2F2012&dataFim=21%2F03%2F2012&tipoResultado=1

GET(同じArgumentExceptionがスローされます)のot。

私には何が欠けていますか?ここで


アクションメソッドのシグネチャです:

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

そして、ここでは列挙型です:

public enum TipoResultado 
{ 
    Json, 
    Excel, 
    Pdf 
} 
+0

はどのルートテーブルには、のように見えるのでしょうか? MVCが間違ったアクションメソッド(dataInicioパラメータを持たないメソッド)を呼び出しているようです。 –

+0

@TomasVoracek正しいアクションが呼び出されていました。問題は、pjumbleの答えにあるように、日付形式でした。 – Raphael

答えて

7

私は、デフォルトのASP.NET MVCモデルバインダーのパースをこの問題を抱えていましたQueryStringの値はInvariantCulture、POSTされたフォームの値は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

関連する問題