2017-01-23 9 views
2

У меня есть представление с несколькими разделами. Я хотел бы обновлять разделы по отдельности, используя частичные представления и 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.

+0

* «Почему я не могу просто преобразовать связанную модель в json» * - потому что вы используете MVC, а не MVVM. Ваша «связанная модель» - это один путь от контроллера к представлению через модель. Вы смешиваете термин «связанная модель» с «моделью» и «привязкой». Если вы заполните форму, вы получите модель, но если вы пройдете через ajax, вам нужно будет получить текущие значения из формы (как в вашем комментарии), создавая новый экземпляр модели из входов. ваш 'var detailsmodel = JSON.stringify ... 'устанавливается при создании представления и не изменяется. –

+0

Благодарим вас за объяснение. Я буду поглощать создание нового экземпляра модели. Если вы сделаете свой комментарий, я соглашусь. Еще раз спасибо. –

ответ

3

почему я не могу просто преобразовать связанный модель JSon

Это потому, что вы используете MVC, не MVVM.

«Связанная модель» - это один из путей от контроллера к виду через модель; возможно, вы смешиваете термин «связанная модель» с «моделью» и «привязкой».

Если вы заполните форму, вы получите модель в действии (на основе параметров, конечно), но если вы пройдете через ajax, вам нужно будет получить текущие значения из формы (как в вашем комментарий «создание нового экземпляра модели из входов»).

Вы можете генерировать данные для передачи через AJAX различными способами, такими как:

var data = $("form").serialize(); 

вместо добавления каждого входного сигнала вручную.

var detailsmodel = JSON.stringify... устанавливается при создании представления и не будет автоматически изменяться с использованием MVC.

1

Это потому, что данные, которые вы проходите, статически устанавливаются при загрузке страницы, основываясь на @Html.Raw(Json.Encode(@Model.userdetails)).

Вам нужно будет использовать что-то вроде $form.serialize() или иначе создать тело сообщения из фактических полей на странице.

Смежные вопросы