2015-12-07 3 views
2

Сценарий: как обновить модель?Как обновить модель в ASP NET MVC 6?

ASP MVC 6

Я пытаюсь обновить модель. Для передачи информации о модели клиенту (браузер/приложение) я использую DTO.

Вопрос 1: Для обновления, должен ли я отправить весь объект обратно?

Вопрос 2: Есть ли способ, которым я могу легко передать только обновленную информацию? Если да, то как?

Вопрос 3: Могу ли я использовать патч JSON для обновления?

ответ

1

Вопрос 2: Есть ли способ, которым я могу легко передать только информацию, которую обновляет ? Если да, то как?

Да. Вы должны создать модель представления, которая должна иметь только те свойства, которые необходимы для представления.

Предположим, что ваш прецедент предназначен для создания вида, позволяющего редактировать только свою фамилию.

public class EditUserViewModel 
{ 
    public int Id {set;get;} 
    public string LastName {set;get;} 
} 

И в вашем Get

public ActionResult Edit(int id) 
{ 
    var user = yourUserRepository.GetUser(id); 
    if(user!=null) 
    { 
    var v = new EditUserViewModel { Id=id,LastName=user.LastName}; 
    return View(v); 
    } 
    return View("NotFound"); 
} 

И вид

@model EditUserViewModel 
@using(Html.BeginForm()) 
{ 
    @Html.TextBoxFor(s=>S.LastName) 
    @Html.HiddenFor(s=>s.Id) 
    <input type="submit" id="saveBtn" /> 
} 

и вашего HttpPost действия

[HttpPost] 
public ActionResult Edit(EditUserViewModel model) 
{ 
    // Since you know you want to update the LastName only, 
    // read model.LastName and use that 
    var existingUser = yourUserRepository.GetUser(model.Id); 
    existingUser.LastName = model.LastName; 
    yourUserRepository.Save(); 
    // TO DO: redirect to success page 
} 

Предполагая, что yourUserRepository является объектом ваших данных доступом s абстракции классов.

Вопрос 1: Для обновления должен ли я отправить весь объект обратно?

В зависимости от того, что вы хотите от конечного пользователя. При таком подходе к модели представления, он будет публиковать только Id и LastName, и это наш прецедент.

Могу ли я использовать патч JSON для обновления?

Поскольку вы отправляете только данные, которые необходимо обновить (частичные данные), все должно быть хорошо.

Если вы хотите, вы можете просто сериализовать данные своей формы (которые имеют только Id и LastName) и использовать метод jQuery post для отправки его на ваш сервер.

$(function(){ 

    $("#saveBtn").click(function(e){ 

    e.preventDefault(); //prevent default form submit 

    var _form=$(this).closest("form"); 
    $.post(_form.attr("action"),_form.serialize(),function(res){ 
     //do something with the response. 
    }); 

    }); 

}); 

Чтобы предотвратить overposting, вы можете использовать привязку, используя белый список Bind атрибут вашего HttpPost метода действия. Но самая безопасная стратегия - использовать класс модели представления, который точно соответствует тому, что клиенту разрешено отправлять.

+0

Вы прояснили большинство моих сомнений. Но мне было интересно, следует ли использовать JSON Patch для отправки информации об обновлении? –

+1

Поскольку вы отправляете только необходимые данные. Просто напишите свою форму, которая должна быть достаточно хорошей. – Shyju

+0

На самом деле есть еще одна вещь. У меня также есть приложение, которое будет иметь те же операции. Должен ли я использовать один и тот же подход ViewModel для приложения или использовать JsonPatch? Или если вы можете уточнить некоторые сценарии, в которых можно использовать патч JSON? –

0

Вместо этого

UpdateModel(model); 

Теперь Вы можете назвать это

await TryUpdateModelAsync(model); 
Смежные вопросы