1

$.ajax メソッドを使用してビューからコントローラーに json オブジェクトを受信したいのですが、コントローラーの受信オブジェクトが null データを表示する理由がわかりません。

これが私のコードです。

$("#Save").click(function (e) {

       $.ajax({ url: "Home/Save",
        type: "POST",
        datatype:'json',                
        data: ({movies:movies})
      });
});

ここで、movies は、次を含む JavaScript 配列です。

    ({
    Name:"DDLJ",Stars:"SRK",Director:"Yashraj",Year:"2012"
    }, {Name:"K3G",Stars:"SRK",Director:"Karan",Year:"2010"}
)

私のコントローラーコードは次のとおりです。

public string Save (List<MovieDB> movies)
        {
         return "";
        }

ここで、MovieDB は、プロパティを持つモデル クラスです。

public class MoviesDB   
    {
        //public int MoviesID { get; set; }
        public string Name { get; set; }
        public string Stars { get; set; }
        public string Director { get; set; }
        public DateTime Year { get; set; }
    }

ビューからコントローラーにjsonデータを受け取るためのより良い方法を提案してください。

実際には、ビューからコントローラーアクションメソッドにjavascript配列オブジェクトを送信しようとしましたが、その中に私の配列コードがあります

<script type="text/javascript">
    var cnt = 1;
        var cnt2 = 1;
        var i;
        var movies = [];

    movies.push({ Name: $("#txtMovieName").val(), Stars: $("#txtStarCasts").val(), Director: $("#txtDirector").val(), Year: $("#txtYear").val(), Index: cnt++ });

                    $("#modelTable").empty();

                    $("#modelTemplate").tmpl(movies).appendTo($("#modelTable"));

                    $("#txtMovieName").val("");
                    $("#txtStarCasts").val("");
                    $("#txtDirector").val("");
                    $("#txtYear").val("");
                    $("#txtMovieName").focus();
                    e.preventDefault();
            });

  $("#Save").click(function (e) {

            //var jm = $.toJSON(movies);
            $.ajax({ url: "Home/Save",
                type: "POST",

                data: ({movies:movies})
                // contentType: 'application/json; charset=utf-8'
             });
        });

    </script>

今、私はその映画のjavascript配列オブジェクトをコントローラーのSave()アクションメソッドに送信したいのですが、jsonなどの方法を使用して何か提案してください...

4

3 に答える 3

1

これは正しいjsonではありません。これはJSONLintで確認できます

正しいjsonは次のとおりです。

[
    {
        "Name": "DDLJ",
        "Stars": "SRK",
        "Director": "Yashraj",
        "Year": "2012"
    },
    {
        "Name": "K3G",
        "Stars": "SRK",
        "Director": "Karan",
        "Year": "2010"
    }
]

それでもエラーがある場合は、お知らせください。

于 2012-07-05T12:47:47.633 に答える
0
 List<xyztype> lstid = new JavaScriptSerializer().Deserialize<List<xyztype>>(IDlist);

私のために働いています

ここで、xyztype はコレクション クラス タイプであり、IDlist は、ビューからコントローラー アクション メソッドへの json オブジェクト文字列です。

javascriptserializer().deserializer<> を使用して、json 文字列をカスタムまたはシステム データ型オブジェクトに変換できます。

例えば ​​:

  List<string> lstid = new JavaScriptSerializer().Deserialize<List<string>>(IDlist);
于 2012-08-21T08:23:23.917 に答える
0

投稿後にコントローラーにデータを取得したい場合は、これがより良い答えかもしれません。

//For going to your view.
public ActionResult Create()
{
    MoviesDB model = new MoviesDB();
    return View("Create", model);
}


[HttpPost]
public ActionResult Create(MoviesDB model)
{
    if (ModelState.IsValid)
    {
        //Here you can use your model param 
        //with the filled in values of your view.

        return RedirectToAction("Index"); 
        //when everything works fine, go to this view.
    }
    else
    {
        return RedirectToAction("Index"); 
        //when there is a problem, go to this view.
    }

    return View("Index");
}

ビューからデータを使用するために jQuery は必要ありません。

于 2012-07-05T13:06:43.827 に答える