#javascript #asp.net #ajax #asp.net-core
#javascript #asp.net #ajax #asp.net-ядро
Вопрос:
Я пытаюсь отправить весь объект из javascript в asp.net основной контроллер.
Вот класс C #, который у меня есть:
public class AREvent
{
public int ID { get; set; }
public string Title { get; set; }
public string Text { get; set; }
}
Я передаю его из ajax следующим образом:
function Upp() {
var ev = {};
ev.ID = 1;
ev.Title = "asd";
ev.Text = "Some text";
var fd = new FormData();
fd.append("e", ev);
fd.append("aaa", "Some text");
alert(ev.ID); // alerts 1
$.ajax({
type: "POST",
url: "/Events/Add1",
cache: false,
contentType: false,
processData: false,
data: fd,
success: function () {
}
});
}
и вот контроллер:
[HttpPost]
[Route("/Events/Add1")]
public async Task<IActionResult> Add1(AR.AREvent e, string aaa)
{
/// aaa is passed as "some text"
/// e is passed as null or as empty object
object a = e;
return Json("1");
}
Ответ №1:
Вам не нужно передавать FormData. Вы должны передать объект следующим образом:
$.ajax({
url: "/Events/Add1",
type: 'POST',
dataType: 'json',
data: JSON.stringify(ev),
contentType: "application/json",
success: function (result, text, xhr) {
},
error: function (request, status, error) {
}
});
И в контроллере:
[HttpPost]
[Route("/Events/Add1")]
public async Task<IActionResult> Add1([FromBody] AREvent e)
{
AREvent a = e;
return Json("1");
}
Ответ №2:
Насколько я знаю, если вы хотите передать данные формы в контроллер, нет необходимости создавать новую модель js с именем ev. Вы должны напрямую добавить значение свойства в модель данных формы в js и asp.net привязка к базовой модели свяжет значение автоматически. Привязка модели будет отображать свойство в соответствии с именем данных формы вместо объекта.
Более подробную информацию вы можете найти в приведенных ниже кодах:
function Upp() {
var fd = new FormData();
fd.append("ID", 1);
fd.append("Title", "asd");
fd.append("Text", "Some text");
fd.append("aaa", "Some text2");
$.ajax({
type: "POST",
url: "/Events/Add1",
cache: false,
contentType: false,
processData: false,
data: fd,
success: function () {
}
});
}
Результат: