将JSON传递给控制器​​操作问题

时间:2011-03-07 08:18:25

标签: javascript asp.net asp.net-mvc json

我有以下javascript。

问题是,如果我在表“components”中输入一行,但是在我的C#对象中,我在得到的传递给控制器​​操作时得到2行。但第二个对象是null?

我检查了javascript,变量“cnt”是1而不是2。

为什么会这样?

马尔科姆

[代码]

$("#Save").click(function () {
var title = $("#recipetitle").val();
var category = $("#category").val();
var preptime = $("#prepTime").val();
var preptimeperiod = $("#lstPrepTime").val();
var cooktime = $("#cookTime").val();
var cooktimeperiod = $("#lstCookTime").val();
var rating = $("#rating").val();
var method = $("#method").val();

var jsontext = '{ "RecipeTitle": "' + title + '",';
jsontext += '"CategoryID":' + category + ',';
jsontext += '"PrepTime":' + preptime + ',';
jsontext += '"PrepTimePeriod":"' + preptimeperiod + '",';
jsontext += '"CookTime":' + cooktime + ',';
jsontext += '"CookTimePeriod":"' + cooktimeperiod + '",';
jsontext += '"Rating":' + rating + ',';
jsontext += '"Method":"' + method + '",';

var ing = "";
var cnt = 0;
$("#ingredients tr.ingredientdata").each(function () {
    if ($("td.ingredient", this).text() != "") {
        ing += '{ "IngredientName": "' + $("td.ingredient", this).text() + '",';
        ing += '"Units": ' + $("td.units", this).text() + ',';
        ing += '"Measure": "' + $("td.measure", this).text() + '"} ,';
    }
    cnt = cnt + 1;
});
alert(cnt);
if (ing != "") {
    jsontext += '"Ingredients": [';
    ing = ing.substring(0, jsontext.length - 1);
    jsontext = jsontext + ing;
    jsontext += ']';
}
jsontext += '}';

var json = eval('(' + jsontext + ')');
//var json = { Field: 1 };

$.ajax({
    url: "/Recipe/Save",
    type: "POST",
    dataType: 'json',
    data: JSON.stringify(json),
    contentType: "application/json; charset=utf-8",
    success: function () {
        //alert("DONE!!");
    }
});

}); [/代码]

1 个答案:

答案 0 :(得分:1)

我建议您重构一下javascript,因为它可以帮助您更轻松地识别错误。还可以使用FireBug检出发送给控制器的实际JSON请求:

$("#Save").click(function () {
    var ingredients = $('#ingredients tr.ingredientdata').map(function(index, element) {
        return {
            ingredientName: $('td.ingredient', element).text(),
            units: $('td.units', element).text(),
            measure: $('td.measure', element).text()
        };
    });

    var json = {
        RecipeTitle: $('#recipetitle').val(),
        CategoryID: $('#category').val(),
        PrepTime: $('#prepTime').val(),
        PrepTimePeriod: $('#lstPrepTime').val(),
        CookTime: $('#cookTime').val(),
        CookTimePeriod: $('#lstCookTime').val(),
        Rating: $('#rating').val(),
        Method: $('#method').val(),
        Ingredients: ingredients
    };

    $.ajax({
        url: '/Recipe/Save',
        type: 'POST',
        dataType: 'json',
        data: JSON.stringify(json),
        contentType: 'application/json; charset=utf-8',
        success: function () {
            //alert("DONE!!");
        }
    });
});