22

フォームからWebAPIアクションに情報を送信する方法を理解しようとしています。これは私が使用しようとしているjQuery/AJAXです。

var source = { 
        'ID': 0, 
        'ProductID': $('#ID').val(), 
        'PartNumber': $('#part-number').val(),
        'VendorID': $('#Vendors').val()
    }

    $.ajax({
        type: "POST",
        dataType: "json",
        url: "/api/PartSourceAPI/",
        data: JSON.stringify({ model: source }),
        success: function (data) {
            alert('success');
        },
        error: function (error) {
            jsonValue = jQuery.parseJSON(error.responseText);
            jError('An error has occurred while saving the new part source: ' + jsonValue, { TimeShown: 3000 });
        }
    });

これが私のモデルです

public class PartSourceModel
{
    public int ID { get; set; }
    public int ProductID { get; set; }
    public int VendorID { get; set; }
    public string PartNumber { get; set; }
}

これが私の見解です

<div id="part-sources">
    @foreach (SmallHorse.ProductSource source in Model.Sources)
    {
        @source.ItemNumber <br />
    }
</div>
<label>Part Number</label>
<input type="text" id="part-number" name="part-number" />

<input type="submit" id="save-source" name="save-source" value="Add" />

これが私のコントローラーのアクションです

// POST api/partsourceapi
public void Post(PartSourceModel model)
{
    // currently no values are being passed into model param
}

私は何が欠けていますか?今、私がデバッグして、ajaxリクエストがコントローラーアクションにヒットしたときにこれをステップスルーすると、モデルパラメーターに何も渡されません。

4

4 に答える 4

30

これを試して:

jquery

    $('#save-source').click(function (e) {
        e.preventDefault();
        var source = {
            'ID': 0,
            //'ProductID': $('#ID').val(),
            'PartNumber': $('#part-number').val(),
            //'VendorID': $('#Vendors').val()
        }
        $.ajax({
            type: "POST",
            dataType: "json",
            url: "/api/PartSourceAPI",
            data: source,
            success: function (data) {
                alert(data);
            },
            error: function (error) {
                jsonValue = jQuery.parseJSON(error.responseText);
                //jError('An error has occurred while saving the new part source: ' + jsonValue, { TimeShown: 3000 });
            }
        });
    });

コントローラ

    public string Post(PartSourceModel model)
    {
        return model.PartNumber;
    }

意見

<label>Part Number</label>
<input type="text" id="part-number" name="part-number" />

<input type="submit" id="save-source" name="save-source" value="Add" />

Addこれで、テキストボックスに入力した後で「」をクリックすると、アラートcontrollerのボックスに書き込んだ内容が吐き出されます。PartNumber

于 2012-12-14T01:15:38.887 に答える
6

変化する:

 data: JSON.stringify({ model: source })

に:

 data: {model: JSON.stringify(source)}

そして、コントローラーでこれを行います。

public void PartSourceAPI(string model)
{
       System.Web.Script.Serialization.JavaScriptSerializer js = new System.Web.Script.Serialization.JavaScriptSerializer();

   var result = js.Deserialize<PartSourceModel>(model);
}

jqueryで使用するURLがである場合/api/PartSourceAPI、コントローラー名はである必要がapiあり、アクション(メソッド)はである必要がありますPartSourceAPI

于 2012-12-14T00:08:45.700 に答える
3
var model = JSON.stringify({ 
    'ID': 0, 
    'ProductID': $('#ID').val(), 
    'PartNumber': $('#part-number').val(),
    'VendorID': $('#Vendors').val()
})

$.ajax({
    type: "POST",
    dataType: "json",
    contentType: "application/json",
    url: "/api/PartSourceAPI/",
    data: model,
    success: function (data) {
        alert('success');
    },
    error: function (error) {
        jsonValue = jQuery.parseJSON(error.responseText);
        jError('An error has occurred while saving the new part source: ' + jsonValue, { TimeShown: 3000 });
    }
});

var model = JSON.stringify({      'ID': 0,     ...': 5,      'PartNumber': 6,     'VendorID': 7 }) // output is "{"ID":0,"ProductID":5,"PartNumber":6,"VendorID":7}"

データは次のようになります"{"model ":" ID ":0、" ProductID ":6、" PartNumber ":7、" VendorID ":8}}"WebAPIコントローラーはデータをモデルにバインドできません

于 2012-12-14T13:56:24.630 に答える
-4

私はあなたが周りに引用符が必要だと信じていますmodel

JSON.stringify({ "model": source })
于 2012-12-13T23:15:19.217 に答える