0

明らかにするモジュール パターンとノックアウトを使用してフォームをバインドしています。そのフォーム(登録)にデータが入力されると、MVC4 Web メソッドにポストバックする必要があります。

ここにJqueryコードがあります

    /*
Requires JQuery
Requires Knockout
*/
op.TestCall = function () {

    // Private Area
    var _tmpl = { load: "Loading", form: "RegisterForm"};

    var
    title = ko.observable(null)
    template = ko.observable(_tmpl.load),
    msg = ko.observable(),

    postData = ko.observable(),

    PostRegistration = function () {
        console.log("Ajax Call Start");
        var test = GetPostData();
        $.ajax({

            type: "POST",
            url: obj.postURL, //Your URL here api/registration
            data: GetPostData(),
            dataType: "json",
            traditional: true,
            contentType: 'application/json; charset=utf-8'


        }).done(Success).fail(Failure);
        console.log("Ajax Call End");
    },
    GetPostData = function () {
        var postData = JSON.stringify({
            dummyText1: dummyText1(),
            dummyText2: dummyText2(),

        });
        return postData;

    }


    return {
        // Public Area
        title: title,
        template: template,
        dummyText1: dummyText1,
        dummyText2: dummyText2
    };
}();

コントローラーのコードは今のようにシンプルです

 // POST api/registration
    public void Post(string data)
    {

        ///TODO

    }

私がしようとしているとき、(単純な console.log を使用して) データをキャプチャし、それを jslint.com で検証すると、それは有効な Json です。

  1. データを次のようにハードコーディングしてみました

    data: "{data: '{\'name\':\'niall\'}'}", それでも、私の Web メソッドでは null として取得されます。

  2. 制御された Post メソッドにタグ[System.Web.Script.Services.ScriptMethod(UseHttpGet = false, ResponseFormat = System.Web.Script.Services.ResponseFormat.Json)]を追加しましたが、まだ実りある結果はありません

  3. JSON.Stringify を試してみましdata: JSON.stringify(data)たが、それでも Web メソッドで null を取得します。

私は解決策を理解することができません。

このリンクで同様の問題が見つかりました http://forums.asp.net/t/1555940.aspx/1 でもjQuery Ajax を使用して WebMethod にパラメーターを渡します が、役に立ちませんでした:(

4

2 に答える 2

0

MVC と WebApi はModel Bindingの概念を使用します。

したがって、最も簡単な解決策は、送信された Json データの構造に一致する Model クラスを作成して、サーバー上のデータを受け入れる必要があることです。

public void Post(MyModel model)
{
   ///TODO
}

public class MyModel
{
   public string DummyText1 { get; set; }

   public string DummyText1 { get; set; }
}

注: json と C# のプロパティ名は一致する必要があります。

于 2012-07-30T07:54:03.277 に答える