Модель против списка <Model>при отправке запроса на контроллер с помощью Ajax - PullRequest
0 голосов
/ 13 февраля 2020

Я пытался отправить список моделей на контроллер с помощью ajax, но, похоже, он вообще не работает

Модель

public string MyModel {
   public string myfieldName {get;set;}
}

контроллер

 public JsonResult Create(List<myModel> list)
    {

        return Json("Success");


    }

отправьте запрос

 $("body").on("click", "#btnSave", function () {

    var list= new Array();
    list = [{ myfieldName: 'ABC' }, { myfieldName: 'DEF' }];


    //Send the JSON array to Controller using AJAX.
    $.ajax({

        type: "POST",
        url: "/Project/Create",
        data: JSON.stringify({ list }),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (r) {
            alert(r + " record(s) inserted.");
        }
    });
});

, поэтому, когда я отправляю это через, я проверяю браузер и вижу, что полезная нагрузка запроса отправляется с json списком объектов Однако, когда я go контролирую список не связывает его вообще, поэтому я проверяю http.context, чтобы проверить полезную нагрузку запроса, и все это пусто. с другой стороны, когда я меняю контроллер, как показано ниже

, отправляя запрос только с моделью

public JsonResult Create(myModel data)
{

    return Json("Success");


}

и меняю js с ниже

 $("body").on("click", "#btnSave", function () {

var data ={};
data.myfieldName= "test";



//Send the JSON array to Controller using AJAX.
    $.ajax({

        type: "POST",
        url: "/Project/Create",
        data: data,
        success: function (r) {
            alert(r + " record(s) inserted.");
        }
    });
});

только Разница в том, что я не отправляю как json, поэтому мой вопрос в чем разница между отправкой модели и списком моделей с использованием ajax и тем, что я могу изменить, чтобы заставить контроллер связывать данные или принимать список данных модели, отмечающих, что я использую. Net core 2.0

Спасибо

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Другим методом будет использование ненавязчивого AJAX. Все, что вам нужно, это установить Microsoft jQuery ненавязчиво AJAX из диспетчера пакетов Nuget.

Затем, по вашему мнению, позвоните по следующему номеру:

@{using (Ajax.BeginForm("Create", "ControllerName", null, new AjaxOptions()
     {
          HttpMethod = "POST",
          // ...
     }
}))
{
     // Html code goes here
}

А также убедитесь, что что вы включаете это в нижней части вашего представления:

<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script>

Затем вы можете иметь обычную настройку ActionResult (вместо JsonResult) для вашего контроллера и принять аргумент списка List.

1 голос
/ 13 февраля 2020

Я обычно использую этот метод для отправки моего Model как List моему Controller методу. Я постараюсь показать вам ваш сценарий, как вы можете это сделать:

AJAX:

 $("body").on("click", "#btnSave", function () {

    var list= new Array();
    list = [{ myfieldName: 'ABC'}, { myfieldName: 'DEF'}];


    //Send the JSON array to Controller using AJAX.
        $.ajax({        
            type: "POST",
            url: "@Url.Action("Create","Project")",
            data:{"json": JSON.stringify(list)},
            dataType: "json",
            success: function (r) {
                alert(r + " record(s) inserted.");
            }
        });
    });

И вы можете получить свой Model, как это в вашем Create Метод: Обязательно импортируйте пространство имен System.Web.Script.Serialization:

using System.Web.Script.Serialization

[HttpPost]
public JsonResult Create(string json)
{
    var serializer = new JavaScriptSerializer();
    dynamic jsondata = serializer.Deserialize(json, typeof(object));
    List<string> myfieldName=new List<string>();
    //Access your array now
    foreach (var item in jsondata)
    {
      myfieldName.Add(item["myfieldName"]);
    }

    //Do something with the list here
    return Json("Success");
}

Надеюсь, это поможет вам.

...