5

「ごきげんよう、

複数のパラメーターを mc コントローラー メソッドに送信する際に問題が発生しました。

controller...
[HttpPost]
public ActionResult SaveSomething(SomeDomainObject domainObject, bool anOption)
{
}

Ajax Code...
function performPostData(postDataOptions,closeWindow) {
        $.ajax({ type: postDataOptions.httpVerb,
            url: postDataOptions.url,
            datatype: "json",
            traditional: true,
            data: postDataOptions.data(),
            success: function () {
                if (closeWindow) {
                    var window = $('#window').data("kendoWindow");
                    window.close();             
                }
            },
            error: function (xhr, status, error) {
                var msg = JSON.parse(xhr.responseText);
                var validator = $("#editBase").kendoValidator().data("kendoValidator"),
                status = $(".editValidationStatus");
                var err = msg.Message;
                status.text(err).addClass("invalid");
            }
        });
    }

JScript function to format data...

function GetPostData()
{
    var _domainObject={            
            prop1: 1,
            prop2: 2,
            prop3: 3                      
        };
        return JSON.stringify({ domainObject:_domainObject,anOption: true});
}

これがリクエストボディであることをネットワークキャプチャで確認しました:

{"domainObject":{"prop1":1,"prop2":2,"Prop3":3},"anOption":true}

コントローラーは次の例外を発生させます。

The parameters dictionary contains a null entry for parameter 'anOption' of non-nullable type 'System.Boolean' for method 'System.Web.Mvc.ActionResult SaveSomething(Domain.Data.SomeDomainObject, Boolean)' in 'Reports.Controllers.TestController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter. Parameter name: parameters

シンプルなドメイン オブジェクトと bool 型の別のパラメーターをシリアル化してコントローラーに渡すために、何時間も車輪を回転させてきました。何か案は?

4

1 に答える 1

5

jquery ajax 呼び出しでコンテンツ タイプ パラメータが欠落しているようです。次のコードのように、json として明示的に設定する必要があります。

function performPostData(postDataOptions,closeWindow) {
    $.ajax({ type: postDataOptions.httpVerb,
        url: postDataOptions.url,
        datatype: "json",
        contentType: "application/json; charset=utf-8",

        ...rest of your code

それ以外の場合は、デフォルト値を取得します ( http://api.jquery.com/jQuery.ajax/を参照):

application/x-www-form-urlencoded; 文字セット=UTF-8

于 2012-11-29T19:54:43.920 に答える