Вопрос 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 метода действия. Но самая безопасная стратегия - использовать класс модели представления, который точно соответствует тому, что клиенту разрешено отправлять.
Вы прояснили большинство моих сомнений. Но мне было интересно, следует ли использовать JSON Patch для отправки информации об обновлении? –
Поскольку вы отправляете только необходимые данные. Просто напишите свою форму, которая должна быть достаточно хорошей. – Shyju
На самом деле есть еще одна вещь. У меня также есть приложение, которое будет иметь те же операции. Должен ли я использовать один и тот же подход ViewModel для приложения или использовать JsonPatch? Или если вы можете уточнить некоторые сценарии, в которых можно использовать патч JSON? –