0

私のjQuery/HTML:

@using(Html.BeginForm("Create", "Home", FormMethod.Post)) {

    <input name="ImageName" id="ImageName" type="hidden" />
    <input name="XPos" id="XPos" type="hidden" />
    <input name="YPos" id="YPos" type="hidden" />
    <input name="Height" id="Height" type="hidden" />
    <input name="Width" id="Width" type="hidden" /> 

    <button id="submit" value="submit">Create it!</button>
}


$('form').submit(function () {

    var parameters = [];
    parameters.push({
        ImageName: $('#imagename').val(),
        XPos: $('#xpos').val(),
        YPos: $('#ypos').val(),
        Height: $('#height').val(),
        Width: $('#width').val()
    });

    console.log(JSON.stringify(parameters));

    $.ajax({
        url: '@Url.Action("Create", "Home")',
        type: 'Post',
        data: JSON.stringify(parameters),
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (result) {
            //yadda
        },
        error: function (xhr, status, error) {
          //yadda
        }
    });

これは私のビューモデルです:

public class Image{

    public string ImageName { get; set; }
    public double Xpos { get; set; }
    public double Ypos { get; set; }
    public double Height{ get; set; }
    public double Width { get; set; }
}

そして、これが私のコントローラーです。

JSON.stringify(パラメータ) は次のようになります。

[{"ImageName":"https://domain.com/test.jpg","XPos":"347.98614501953125","YPos":"435.45140838623047","Height":"20","Width":"80.39999999999999"}] 


    [HttpPost]
    public JsonResult Create(Image i) {
         //p always has null values
    }

ViewModel に常に null 値が含まれるのはなぜですか?

4

2 に答える 2

4

あなたのエラーは、配列を使用していることだと思います。このようにしてみてください。

var parameters = {
    ImageName: $('#imagename').val(),
    XPos: $('#xpos').val(),
    YPos: $('#ypos').val(),
    Height: $('#height').val(),
    Width: $('#width').val()
};

または、入力パラメータを次のように変更します

public JsonResult Create(IEnumerable<Image> i)
于 2013-10-23T19:32:53.410 に答える
2

これは、オブジェクトの Javascript 配列です。これはあなたのメソッドの署名と一致しません。

[
  {
    "ImageName":"https://domain.com/test.jpg",
    "XPos":"347.98614501953125",
    "YPos":"435.45140838623047",
    "Height":"20",
    "Width":"80.39999999999999"
  }
] 

私は、あなたが重労働を行うために使用しているフレームワークの組み込み機能のいくつかを使用し始めます.

あなたの見解では:

@Html.HiddenFor(m => m.ImageName);

Jquery の場合:

$('form').submit(function () {

    var serializedForm = $(this).serialize();

    console.log(serializedForm );

    $.ajax({
        url: '@Url.Action("Create", "Home")',
        type: 'Post',
        data: serializedForm ,
        contentType: 'application/json; charset=utf-8',
        dataType: 'json',
        success: function (result) {
            //yadda
        },
        error: function (xhr, status, error) {
          //yadda
        }
    });
于 2013-10-23T19:24:36.500 に答える