Member 7969814 Ответов: 2

Как отправить другой параметр с данными формы ?


Привет, я хочу отправить модель представления с помощью объекта формы ajax в mvc 5.

Вот мой код:
$("#formID").on("submit", function(event) {
                var $this = $(this);
                var OBJ = $this.serialize();
 $.ajax({
                    cache: false,
                    async: true,
                    type: "POST",
                    url: "@Url.Action("Create", "EmpLoyee")",
                    data: OBJ,
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    traditional: true,
                    success: function(data) {
                        alert(data);
                    }
                });

это работает нормально, но когда я добавляю еще один параметр Form Object OBJ становится нулевым.

Я хочу сделать это.

$("#formID").on("submit", function(event) {
                var $this = $(this);
                var OBJ = $this.serialize();
                var Details2 = ["Saab", "Volvo", "BMW"];
                var Details = "Asif";
 $.ajax({
                    cache: false,
                    async: true,
                    type: "POST",
                    url: "@Url.Action("Create", "EmpLoyee")",
                    data: OBJ,
                    data: JSON.stringify(Details),
                    data: JSON.stringify(Details2),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    traditional: true,
                    success: function(data) {
                        alert(data);
                    }
                });

Любое предположение, что не так в моем коде

это контроллер
public ActionResult Create(EmployeeDAL OBJ, List<string> Details, List<string> Details2)
{

}


Что я уже пробовал:

$("#formID").on("submit", function(event) {
                var $this = $(this);
                var OBJ = $this.serialize();
                var Details2 = ["Saab", "Volvo", "BMW"];
                var Details = "Asif";
 $.ajax({
                    cache: false,
                    async: true,
                    type: "POST",
                    url: "@Url.Action("Create", "EmpLoyee")",
                    data: OBJ,
                    data: JSON.stringify(Details),
                    data: JSON.stringify(Details2),
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    traditional: true,
                    success: function(data) {
                        alert(data);
                    }
                });

2 Ответов

Рейтинг:
15

F-ES Sitecore

Я изменил подпись вашего действия на эту

public ActionResult Create(EmployeeDAL OBJ, string Details, List<string> Details2)


потому что "детали" - это одна строка, а не массив.

Вам нужно создать один объект JSON со свойством, которое сопоставляется с каждым из ваших значений param, поэтому;

{
    "OBJ": {"ID":123, "EmployeeName":"John", ...},
    "Details": "Asif",
    "Details2": ["Saab", "Volvo", "BMW"]
}


Хитрый бит-это получение данных формы в виде объекта JSON, но функция getFormData ниже делает это, а другие параметры можно просто добавить

function getFormData($form) {
    var unindexed_array = $form.serializeArray();
    var indexed_array = {};

    $.map(unindexed_array, function (n, i) {
        indexed_array[n['name']] = n['value'];
    });

    return indexed_array;
}

$("#formID").on("submit", function (event) {
    event.preventDefault();
    var $this = $(this);
    var Details2 = ["Saab", "Volvo", "BMW"];
    var Details = "Asif";
    var allData = {
        "OBJ": getFormData($this),
        "Details": Details,
        "Details2": Details2
    };

    var json = JSON.stringify(allData);

    $.ajax({
        cache: false,
        async: true,
        type: "POST",
        url: "@Url.Action("Create", "Employee")",
        data: json,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        traditional: true,
        success: function (data) {
            alert(data);
        }
    });
});


Member 7969814

БОЛЬШОЕ СПАСИБО ВАШ КОД РАБОТАЕТ НОРМАЛЬНО ДЛЯ МЕНЯ ПОЖАЛУЙСТА ОБЪЯСНИТЕ ЭТУ ФУНКЦИЮ

функция getFormData($form) {
unindexed_array ВАР = $форма.serializeArray();
ВАР indexed_array = {};

$.карте(unindexed_array, функции (н я) {
indexed_array[Н['имя']] = Н['значение'];
});

вернуться indexed_array;
}

F-ES Sitecore

serialiseArray() возвращает вашу форму в виде JSON, но не в формате, который вы можете передать действию MVC. Это выходит так

[
{имя:FormElement1Name, значение:FormElement1Value},
{имя:FormElement2Name, значение:FormElement2Value},
...
]

но чтобы отправить ваше действие MVC оно должно быть в таком формате

{
FormElement1Name: FormElement1Value,
FormElement2Name: FormElement2Value
}

таким образом, getFormData создает объект правильного формата, проходя через каждый объект name\value и добавляя свойство к выходному объекту, где имя свойства является значением "name", а значение свойства-значением "value", по существу сопоставляя один формат с другим.

Рейтинг:
0

Gerry Schmitz

Вы получаете "один" параметр "данные" (имя); не так много, как вы хотите.

data: OBJ,
data: JSON.stringify(Details),
data: JSON.stringify(Details2),