Привет всем, я играю с ASP.NET MVC и Entity Framework. Мне было интересно, как лучше всего передать данные из контроллеров в представления, а затем обратно. Я объясню немного лучше:
У меня есть действие для создания нового объекта "Квитанция"
[Authorize]
public ActionResult CreateReceipt(int id)
{
//I create the receipt object
Receipt newReceipt = new Receipt();
// assign some information about the owner of the receipt
// and the group that it belongs to
newReceipt.Group = group;
newReceipt.Owner = user;
//send off to the view to be displayed
return View(newReceipt);
}
Таким образом, я в основном создаю квитанцию и предварительно заполняю некоторую информацию (включая информацию об авторизованном пользователе и некотором идентификаторе группы), затем я могу отправить ее в представление со всеми видами элементов формы, которые позволяют пользователю заполнить другую отсутствующую поля и отправить, чтобы добавить новый чек. Все это прекрасно работает, если все поля из объекта получения отображаются в форме.
Если я удаляю элементы формы для вещей, к которым пользователь не должен прикасаться (например, номер группы, идентификатор пользователя, которому принадлежит квитанция и т. Д ...) Затем, когда я отправляю форму и забираю ее в контроллере:
[HttpPost]
[Authorize]
public ActionResult CreateReceipt(Receipt receipt)
{
if (ModelState.IsValid)
{
using (EntityFrameworkEntities context = new EntityFrameworkEntities)
{
context.AddToReceipts(receipt);
context.SaveChanges();
}
return RedirectToAction("Index");
}
return View(receipt);
}
Тогда вся эта удобная предварительно загруженная информация, которую я заполнил и отправил на просмотр, не возвращается с постом. Я знаю, что могу поместить UserID или GroupID в скрытое поле, а затем он вернется с POST, но это неправильно. Технически кто-то может войти, изменить скрытые значения и повторно отправить сообщение. Затем я мог бы проверить, чтобы все было там, где оно есть, но это было бы похоже на еще одну поездку в базу данных для получения информации, которую я уже однажды получил.
Если кто-нибудь может немного рассказать о том, каков стандартный способ передачи данных из модели в представление в контроллер, это было бы здорово. Спасибо за ваше время и помощь!