【问题标题】:Get data from ajax to mvc action从 ajax 获取数据到 mvc 动作
【发布时间】:2018-03-25 05:47:13
【问题描述】:

我想将 ajax 调用中的对象数组发送到控制器操作。

在后端我有

容器类:

public class MyContainer
{
    public string Id { get; set; }
    public Filter[] Filters { get; set; }
}

public class Filter
{
    public string Name { get; set; }
    public string[] Values { get; set; }
}

和行动:

public ActionResult MyAction(MyContainer container)
{
   var id = container.Id;
   foreach(Filter filter in container.Filters)
   {
       //Do something
   }
}

在前端我有

$(document).on('click', 'mySelector', function (event) {

    //Create first object
    var firstIds = {};
    firstIds.Name = "Custom Name 1";
    firstIds.Values = GetIds('param1'); //this return an array of strings

    //Create second object
    var secondIds = {};
    secondIds.Name = "Custome Name 2";
    secondIds.Values = GetIds('param2'); //another array

    var Id = $(this).attr('id'); //id of element

    //Add objects to array
    var filters = [];
    filters.push(firstIds);
    filters.push(secondIds);

    $.ajax({
        method: "GET",
        url: baseUrl+"/MyAction",
        //traditional: true, //I tried with and without that parameter
        data:
        {
            Id: Id,
            Filters: filters
        },
        contentType: 'application/json',
        success: function (res) {
            alert('success')
        }
    });
});

因此,如果我像上面的示例一样使用它,则运行中的容器对象具有 Id 值并在过滤器中具有 2 个元素的数组,但是它们的名称和值都为空。

将传统设置为 True,我设置了 container.Id 但 container.Filters = null。

有什么建议吗? 谢谢。

【问题讨论】:

    标签: javascript c# jquery ajax asp.net-mvc


    【解决方案1】:

    虽然它是一个旧帖子,但添加我的一点。我会问你是否从动作中返回视图?在这里,您似乎没有返回视图,而只是想更新一些数据。

    但如果您想返回一个视图,例如显示一些产品信息,那么您只需将所选产品的 id 传递给操作方法,检索相关的产品信息,然后将此数据作为模型传递给视图,然后返回完整视图。在这种情况下,您不需要单独的 ajax 调用来处理数据,而只需在请求视图本身(通过 action 方法)时执行。

    相反,如果您已经渲染了视图并且只想更改当前视图中的数据,那么只需诉诸 ajax 调用即可在没有任何视图的情况下获取数据。

    希望对你有帮助

    【讨论】:

      【解决方案2】:

      将POST 请求与JSON.stringify() 方法结合使用。

      C#

      [HttpPost]
      public ActionResult MyAction(MyContainer container)
      {
         var id = container.Id;
         foreach(Filter filter in container.Filters)
         {
             //Do something
         }
      }
      

      JQUERY

      $.ajax({
          method: "POST",
          url: baseUrl+"/MyAction",
          data:JSON.stringify(
          {
              Id: Id,
              Filters: filters
          }),
          contentType: 'application/json',
          success: function (res) {
              alert('success')
          }
      });
      

      为什么需要JSON.stringify() 方法?

      contentType是你要发送的数据类型,所以application/json;默认是application/x-www-form-urlencoded; charset=UTF-8.

      如果您使用application/json,则必须使用JSON.stringify() 才能发送JSON 对象。

      JSON.stringify() 将 javascript object 转换为 json 文本并将其存储在 string 中。

      【讨论】:

        【解决方案3】:

        您应该在ajax 请求中使用POST 方法而不是GET。当您发布数据时。而且你的动作应该有[HttpPost] 装饰器。

        $.ajax({
                method: "POST",
                url: baseUrl+"/MyAction",
                data:
                {
                    Id: Id,
                    Filters: filters
                },
                contentType: 'application/json',
                success: function (res) {
                    alert('success')
                }
            });
        

        【讨论】:

          猜你喜欢
          • 2020-06-26
          • 2013-05-08
          • 2023-03-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-11
          相关资源
          最近更新 更多