У меня есть представление с несколькими разделами. Я хотел бы обновлять разделы по отдельности, используя частичные представления и ajax.Передача сложных объектов с использованием ajax MVC
меня это до сих пор:
Контроллер:
[HttpPost]
public PartialViewResult userdetailssettings(UserDetails model)
{ .... }
Просмотр Html:
<div id="userDetailsPartial">
@Html.Partial("_user_details", Model.userdetails)
</div>
Частичное Html:
<div class="form-group">
<div class="col-md-12">
@Html.TextBoxFor(x => x.Forename, new { @class = "form-control", placeholder = "Enter your forename" })
@Html.ValidationMessageFor(x => x.Forename)
</div>
</div>
<div class="form-group">
<div class="col-md-12">
@Html.TextBoxFor(x => x.Surname, new { @class = "form-control", placeholder = "Enter your surname" })
@Html.ValidationMessageFor(x => x.Surname)
</div>
</div>
Javascript на Вид:
var detailsUrl = "@Url.Action("userdetailssettings", "UserLogin")";
var detailsmodel = JSON.stringify(@Html.Raw(Json.Encode(@Model.userdetails)));
$(document).on('click touchstart', '#saveDetails', function() {
$.ajax({
type: "POST",
dataType: 'json',
data: detailsmodel,
url: detailsUrl,
contentType: "application/json"
}).done(function (res) {
$("#userDetailsPartial").html(res);
addresssearch();
});
});
Модель передается контроллером с помощью ajax, однако значения не относятся к входам. Это исходные значения, переданные с контроллера, чтобы открыть представление.
Я попытался обернуть частичное по тегам, а также попытался добавить теги формы внутри частичного.
Я также попытался поставить этот код:
var detailsUrl = "@Url.Action("userdetailssettings", "UserLogin")";
var detailsmodel = JSON.stringify(@Html.Raw(Json.Encode(@Model.userdetails)));
Внутри функции мыши.
Ничего не передаёт обновленные значения с входов.
Я думал о создании нового экземпляра модели из входов в Javascript т.е.
var detailsmodel = [ { Forename: $('#Forename').val(), Surname: $('#Surname').val() } ];
Но если я просто создание JSON, почему я не могу просто преобразовать связанную модель в формате JSON.
* «Почему я не могу просто преобразовать связанную модель в json» * - потому что вы используете MVC, а не MVVM. Ваша «связанная модель» - это один путь от контроллера к представлению через модель. Вы смешиваете термин «связанная модель» с «моделью» и «привязкой». Если вы заполните форму, вы получите модель, но если вы пройдете через ajax, вам нужно будет получить текущие значения из формы (как в вашем комментарии), создавая новый экземпляр модели из входов. ваш 'var detailsmodel = JSON.stringify ... 'устанавливается при создании представления и не изменяется. –
Благодарим вас за объяснение. Я буду поглощать создание нового экземпляра модели. Если вы сделаете свой комментарий, я соглашусь. Еще раз спасибо. –