大家好,我正在尝试使用ASP.NET MVC和Entity Framework。我想知道在控制器和视图之间传递数据的最佳方法是什么,然后再将其传回。我稍作解释:
我有一个用于创建新“Receipt”对象的动作。
所以,我基本上创建了一个收据并预先填写了一些信息(包括授权用户和一些组ID信息)。然后,我可以将其发送到带有各种表单元素的视图中,让用户填写其他缺失的字段并提交以添加新的收据。如果所有来自收据对象的字段都在表单上显示,则这一切都运行得很好。
如果我删除用户不应该触及的东西的表单元素(例如组号、收据所属的用户ID等...),那么当我提交表单并在控制器中接收时:
我有一个用于创建新“Receipt”对象的动作。
[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);
}
所以,我基本上创建了一个收据并预先填写了一些信息(包括授权用户和一些组ID信息)。然后,我可以将其发送到带有各种表单元素的视图中,让用户填写其他缺失的字段并提交以添加新的收据。如果所有来自收据对象的字段都在表单上显示,则这一切都运行得很好。
如果我删除用户不应该触及的东西的表单元素(例如组号、收据所属的用户ID等...),那么当我提交表单并在控制器中接收时:
[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一起返回,但那感觉很不对。从技术上讲,有人可以进去更改隐藏值并重新提交POST。我可能需要检查以确保所有内容都应该在它们应该存在的位置,但这似乎又要再次访问数据库来获取我已经得到的信息。
如果有人能够详细说明一下从模型到视图到控制器传递数据的标准方法,那就太好了。感谢您的时间和帮助!