繁体   English   中英

将列表传递给控制器​​Asp.Net MVC Json

[英]Passing Lists to Controller Asp.Net MVC Json

我在将列表数据从JS传递到Controller时遇到问题,因为列表是字符串化的,ajax没有提交给Controller。 我应该对javascript和控制器方法进行哪些更改。 任何帮助,都可以实现。

Java脚本

 $('#submit').click(function () {
    var isAllValid = true;
    var list = [];

        var orderItem = {

            Agency: $('.AgentName', this).val(),
            SectorPair: $('select.sectorCategory', this).val().trim(),
            ForPAX: $('.foreignPax', this).val(),
            IndPAX: $('.indianPax', this).val(),
            FlightDate: $('.flightDate', this).val(),
            Airlines: $('select.airlineCategory', this).val().trim()
        }
        list.push(orderItem);
        //}
    })

        $.ajax({
            type: 'POST',
            url: '/DomesticDeparture/Create',
            data: JSON.stringify(list),
            contentType: 'application/json',
            success: function (data) {
                if (data.status) {
                    alert('Successfully saved');
                    //here we will clear the form
                    list = [];
                    $('#airlineName,#departureDate').val('');
                    $('#orderdetailsItems').empty();
                    $('#AgentName').focus();
                }
                else {
                    alert('Error');
                }
                $('#submit').text('Save');
            },
            error: function (error) {
                console.log(error);
                $('#submit').text('Save');
            }
        });
    }

});

控制器

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create( List<DomesticDepartureEntry> dentries)
{
    if (ModelState.IsValid)
    {
       foreach (var a in dentries)
            {
                db.DomesticDepartureEntries.AddRange(dentries);
                db.SaveChanges();
            }
    }

    return View();
}

制作如下所示的API控制器:

using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

public class ValuesController : ApiController
{
        [HttpPost]
        [Route("api/CreateRecord")]
        public async Task<HttpResponseMessage> CreateRecord([FromBody] List<DomesticDepartureEntry> dentries)
        {
            try
            {
               if (ModelState.IsValid)
               {
                  db.DomesticDepartureEntries.AddRange(dentries);
                  db.SaveChanges();
                  return new HttpResponseMessage()
                {
                    Content = new ObjectContent<JObject>(new JObject { new JProperty("message", "Record successfully inserted into the database!") }, new JsonMediaTypeFormatter()),
                    StatusCode = HttpStatusCode.OK
                };

               }
            }
            catch(Exception ex)
            {
               return new HttpResponseMessage()
                {
                    Content = new ObjectContent<JObject>(new JObject { new JProperty("message", $"Failed because: {ex.Message}") }, new JsonMediaTypeFormatter()),
                    StatusCode = HttpStatusCode.ExpectationFailed
                };
            }
        }
}

您不向AJAX成功回调返回视图,而是向回调返回JSON对象以及状态码。

并修改您的AJAX调用以将其路由到以下Web API:

$.ajax({
        method: 'POST',
        url: 'api/CreateRecord',
        data: JSON.stringify(list),
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        success: function (data)
        {
              if(!$.isEmptyObject(data)){
                console.log( data["message"] );
                alert( data["message"]);

                //Your business logic
                //here we will clear the form
                list = [];
                $('#airlineName,#departureDate').val('');
                $('#orderdetailsItems').empty();
                $('#AgentName').focus();
             }
            else
                 alert('Some error occured!');
        },
        error: function ( jqXHR, errorThrown, statusText )
        {
                console.log( errorThrown );
                alert(errorThrown);
        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM