Рассмотрим следующий код:ASP.NET MVC: Как слишком сохранить Orignal состояние объекта по проводам
public ActionResult Edit(int id)
{
return View(db.Foos.Single(x => x.Id == id));
}
Когда пользователь отправляет изменения, я хотел бы получить как оригинальные, так и текущие значения объектов, таких, что Обновить код может быть:
Foo foo = db.Foos.Attach(current, original);
db.SubmitChanges();
Я вижу два варианта:
1) оказывает целый ряд скрытых входов, содержащих исходные значения
<input type="hidden" name="original.A" value="<%= Model.A %> />
<input type="hidden" name="original.B" value="<%= Model.B %> />
<input type="text" name="current.A" value="<%= Model.A %>
<input type="text" name="current.B" value="<%= Model.B %>
и представить:
public ActionResult Update(Foo current, Foo original)
{
Foo foo = db.Foos.Attach(current, original);
db.SubmitChanges();
}
2) Используйте некоторые сериализации/десериализации в одно скрытое поле
<input type="hidden" name="original" value="<%= Serialize(original) %> />
и sumbmit к:
public ActionResult Update(Foo current, string original)
{
Foo original = DeserializeFrom<Foo>(original);
Foo foo = db.Foos.Attach(current, original);
db.SubmitChanges();
}
Есть ли другие опции? Или инструменты, которые упрощают запись такого кода?
EDIT:
Чтобы быть более ясным ... идея сохранения первоначальной стоимости является устранение дополнительной выбрать, что произойдет, если код написан так:
public ActionResult Update(Foo changed)
{
Foo original = db.Foos.Single(x => x.Id == changed.Id);
MyUtils.CopyProps(original, current);
db.SubmitChanges();
}
На самом деле стандартный HtmlHelper уже имеет Html.Hidden и Html.TextBox. Но может быть, вы имеете в виду некоторых помощников для создания списка хидденов, использующих отражение? – alex2k8
Я на самом деле хочу сделать новый метод расширения, который сидит вдоль стороны Html.Hidden и Html.TextBox, который просто объединяет эти методы, чтобы упростить факт, что вам нужно сделать скрытое текстовое поле для каждого свойства, которое вы хотите отобразить. Таким образом, ваш взгляд показывает только что-то вроде: «Html.EditField» , который отобразит как скрытое, так и текстовое поле в html –
А .. Хорошая идея! – alex2k8