Ссылка HTML-сайт с действием сайта MVC - PullRequest
0 голосов
/ 04 января 2019

Я строю HTML-страницу по нажатию кнопки, она будет передавать данные из localStorage на HTML-странице в действие и действие сайта MVC, а затем сохранять данные на сайте MVC

это функция моей кнопки HTML:

function OH10() {            
            var url1 = "@Url.Action('createFuel','FuelExtras')";
            debugger;
            for (var i = 0; i < localStorage.length; i++) {
                var key = localStorage.key(i);
                var val = localStorage.getItem(key);
                $.ajax({
                    type: "POST",
                    url: url1,
                    data: val,
                    dataType: "json",
                    contentType: "application/json; charset=utf-8",
                    success: function () {
                        alert("Data has been added successfully.");
                    },
                    error: function () {
                        alert("Error while inserting data");
                    }
                });
            }
};

А действия сайта MVC:

[HttpPost]
        [System.Web.Services.WebMethod]
        public ActionResult createFuel(FuelExtra fuelExtra)
        {
            db.FuelExtras.Add(fuelExtra);
            db.SaveChanges();
            string message = "SUCCESS";
            return Json(new { Message = message, JsonRequestBehavior.AllowGet });
        }

Есть предложения, ребята?И еще один вопрос находится в стадии разработки, я построил 2 сайта в одном решении, но когда я развернул его в интрасети, мне пришлось разделить его на 2 сайта.Это нормально?

1 Ответ

0 голосов
/ 04 января 2019

Я нашел несколько ошибок в вашем примере:

1) System.Web.Services.WebMethod используется только в веб-формах, его нельзя использовать для ActionResult в MVC и его следует удалить.

2)Обратный вызов AJAX размещен внутри цикла, поэтому он будет выполняться несколько раз вместо одного запроса.

3) Переданные данные - это последнее значение localStorage, взятое из функции getItem() как одна строка, а не ключпара-значение, отражающая имена свойств модели и их значения.

Следовательно, предполагая, что у вас есть эта модель:

public class FuelExtra
{
    public string CaptainEmpNo { get; set; } 
    public string AirCraft { get; set; } 
    public string FlightNo { get; set; } 
    public string DepartureAirport { get; set; } 
    public string ArrivalAirport { get; set; }

    // other properties
}

Затем вы должны отправить объект пары ключ-значение в виде строки JSON, поскольку *Параметр 1016 * был установлен на application/json с помощью JSON.stringify(), как в примере ниже:

function OH10() {            
    var key = []; // array of keys
    var val = []; // array of values

    var obj = {}; // combined KVP object

    var url1 = "@Url.Action("CreateFuel", "FuelExtras")";
    debugger;
    for (var i = 0; i < localStorage.length; i++) {
        key.push(localStorage.key(i));
        val.push(localStorage.getItem(key));
    }

    for (var n = 0; n < key.length; n++) {
        obj[key[n]] = val[n]; // create KVP object from both arrays
    }

    $.ajax({
       type: "POST",
       url: url1,
       data: JSON.stringify({ fuelExtra: obj }), // convert KVP object to JSON string
       dataType: "json",
       contentType: "application/json; charset=utf-8",
       success: function (result) {
           alert("Data has been added successfully.");
       },
       error: function (xhr, status, err) {
           alert("Error while inserting data");
       }
    });
};

И действие контроллера должно быть таким:

[HttpPost]
public ActionResult CreateFuel(FuelExtra fuelExtra)
{
    db.FuelExtras.Add(fuelExtra);
    db.SaveChanges();
    return Json(new { Message = "SUCCESS" });
}

Так как вы 'повторная отправка AJAX-запроса как метода POST, тогда JsonRequestBehavior.AllowGet не требуется.

Примечание:

Убедитесь, что все имена ключей внутри переданной строки JSON из AJAX совпадают свсе имена свойств, объявленные внутри FuelExtra класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...