Я пытаюсь передать объект модели MVC в действие контроллера из JavaScript, но это либо null, либо ошибки, когда я пробовал что-то более суток.
Аргумент контроллера JC всегда равен null.
Мой код JavaScript:
$(function() {
$(".dialog-modal").dialog({
height: 140,
modal: true
});
});
$(function() {
$("#job-save").dialog({
height: 240,
modal: true
});
});
$("#job-save").dialog({
close: function(event, ui) {
window.location.href = "/EquipmentAll";
}
});
$(function() {
$("#ContactKey").change(function() {
var t = $(this).val();
if (t !== "") {
$.post("@Url.Action("GetContactDefaults")?val = " + t + "&JC = " + @Model,
function(res) {
if (res.Success === "true") {
//enable the text boxes and set the value
$("#ContactEmail").prop('disabled', false).val(res.Data.EmailAddress);
$("#Height").prop('disabled', false).val(res.Data.Height);
} else {
alert("Error getting data!");
}
}
)
} else {
//Let's clear the values and disable :)
$("input.editableItems").val('').prop('disabled', true);
}
});
});
Код действия моего контроллера:
[HttpPost]
public ActionResult GetContactDefaults(string val, JobCreate JC)
{
//Contact tContact = JC.ContactList.FirstOrDefault(c => c.ContactKey == val);
if (val != "")
{
// Values are hard coded for demo. you may replae with values
// coming from your db/service based on the passed in value ( val.Value)
return Json(new { Success = "true", Data = new { EmailAddress = "col@ss", TelAreaCode = 345, TelNo = 100, ACa = "444" } });
}
return Json(new { Success = "false" });
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны сериализовать свою модель и вставить Html.Raw. Я рекомендую передавать объект в теле POST вместо параметра GET:
На ваш взгляд, поместите объект в тело запроса:
var callback = function(res) {
if (res.Success === "true") {
//enable the text boxes and set the value
$("#ContactEmail").prop('disabled', false).val(res.Data.EmailAddress);
$("#Height").prop('disabled', false).val(res.Data.Height);
} else {
alert("Error getting data!");
}
});
$.post("@Url.Action("GetContactDefaults")?val = " + t, "@Html.Raw(Json.Encode(Model))", callback, 'json');
В контроллере добавьте атрибуты параметров:
[HttpPost]
public ActionResult GetContactDefaults([FromQuery]string val, [FromBody]JobCreate JC)
@Col какая у вас версия ASP.NET MVC? Core, 4 или 5?
@Col попробуйте изменить FromQuery на FromUri или оставить string val без атрибута
System.Web.Mvc в конфигурации - 5.2.3.0
Я заставил его обрабатывать дальше, удалив атрибут. Однако теперь он вылетает - я думаю, потому что в данных, закодированных в json, есть знак @, но я буду искать дальше.
Спасибо за быстрый ответ. Теперь я получаю CS0246 Не удалось найти тип или имя пространства имен FromQueryAttribute. Отсутствует директива Using или ссылка на сборку? Что мне здесь не хватает?