【问题标题】:ajax pass object to controllerajax 将对象传递给控制器
【发布时间】:2014-05-20 18:06:42
【问题描述】:

主控制器:

      [HttpPost]
      public JsonResult SetDefaultHomeCategoryOrder(CategoryOrderModel categories)
            {


                return Json(new { msg = "ok" });
            }

            public class CategoryOrderModel
            {
                public int DisplayOrder;
                public int CategoryId;
            }


View: 

                     var operationCollection = new CategoryOrderModel();


      $.ajax({
                    url: '@Url.Action("SetDefaultHomeCategoryOrder", "Home")',
                    dataType: 'json',
                    data: JSON.stringify(operationCollection),
                    type: 'POST',
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        alert(data.msg);

                    },
                    error: function (data) {
                        alert('error');
                    }
                });

控制器永远得不到正确的参数??

更新:我更改了代码以接受集合

[HttpPost]
        public JsonResult SetDefaultHomeCategoryOrder(List<CategoryOrderModel> categories)
        {         

            return Json(new { msg = 'ok' });
        }

查看:

 var collection = [];
 var col1= new CategoryOrderModel(1,2);
 collection.push(col1);
var col2= new CategoryOrderModel(2,5);
 collection.push(col2);
$.ajax({
            url: '/Home/SetDefaultHomeCategoryOrder/',
            dataType: 'json',
            data: '{ categories : ' + JSON.stringify(collection) + '}',
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                alert(data.msg);

            },
            error: function (data) {
                alert('error');
            }
        });


function CategoryOrderModel(displayOrder, categoryId) {
        var self = this;
        self.DisplayOrder = displayOrder;
        self.CategoryId = categoryId;
    }

【问题讨论】:

  • SetDefaultHomeCategoryOrder - 您的问题中没有证据表明此操作甚至存在。
  • 我认为您需要用您的操作方法 SetCategoryOrder 替换“SetDefaultHomeCategoryOrder”
  • 您是否尝试过使用 firebug 或其他调试器查看控制台输出?
  • ReferenceError: CategoryOrderModel 未定义 var operationCollection = new CategoryOrderModel(); >> 来自萤火虫控制台
  • 因此您在客户端使用服务器端 C# 对象。哪个不起作用尝试@RollerCosta 解决方案,应该可以。

标签: c# asp.net-mvc


【解决方案1】:

以下是代码中的错误

1.你的模型没有getter和setter

public class CategoryOrderModel
{
    public int DisplayOrder { get; set; }
    public int CategoryId { get; set; }
}

2. 由于是 javascript , operationCollection 是模型,所以它不会起作用,而是 deaclare 一个变量

  var CategoryOrderModel =
  {
      "DisplayOrder": "7",
      "CategoryId": "9"
  };

        $.ajax({
            url: '@Url.Action("SetCategoryOrder", "Home")',
            dataType: 'json',
            data: '{ categories : ' + JSON.stringify(CategoryOrderModel) + '}',
            type: 'POST',
            contentType: "application/json; charset=utf-8",
            success: function (data) {
                alert(data.msg);

            },
            error: function (data) {
                alert('error');
            }
        });

【讨论】:

  • 不知道为什么我错过了 '{ categories : ',我想我需要一杯咖啡才能继续 :) 谢谢。
【解决方案2】:

正如我们所知,MVC 的工作原理是名称/值对,即强类型视图和模型绑定。

也许你可以这样做:

 $.ajax({
                    url: '@Url.Action("SetDefaultHomeCategoryOrder", "Home")',
                    dataType: 'json',
                    data: {'DisplayOrder' : 9 , 'CategoryId' : 1},
                    type: 'POST',
                    contentType: "application/json; charset=utf-8",
                    success: function (data) {
                        alert(data.msg);

                    },
                    error: function (data) {
                        alert('error');
                    }
                });

注意数据键/值data: {'DisplayOrder' : 9 , 'CategoryId' : 1},,这有点类似于在MVC中发布表单。

通常我们使用$('#formId').serialize() 将集合从视图发送到带有 jquery/ajax 的控制器。

【讨论】:

  • 谢谢,我知道它会起作用,但我稍后会将 CategoryModel 的集合传递给控制器​​。这就是为什么我先尝试一个对象。
  • 如果有帮助,您可以使用 Ajax.BeginForm()。
  • 我不提交表单,我使用 jqueryUI Sortable 来允许用户移动类别列表的顺序并将排列保存到 cookie。
【解决方案3】:

您正在尝试将数据传递给控制器​​“SetDefaultHomeCategoryOrder”或“SetCategoryOrder” 如果动作名称是 SetCategoryOrder 然后输入

url:@Url.Action('SetCategoryOrder','Home')

【讨论】:

    【解决方案4】:

    您的方法与您调用 SetDefaultHomeCategoryOrder 的视图不匹配,但在控制器内部它被称为 SetCategoryOrder

    【讨论】:

    • Patrick 如果他首先要争取调用该方法,我怀疑他是否修改了默认路由
    • 抱歉有错别字,这不是问题。
    猜你喜欢
    • 1970-01-01
    • 2012-09-30
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    • 2019-05-25
    • 1970-01-01
    • 2013-01-29
    相关资源
    最近更新 更多