嘿大家,我正在玩ASP.NET MVC和實體框架。我想知道什麼是處理從控制器到視圖然後回傳數據的最佳方法。我會解釋更好一點:ASP.NET MVC通過傳遞數據
我有一個動作是創建一個新的「收據」對象
[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將其返回,但感覺不對。從技術上講,有人可以進入,改變隱藏的價值並重新提交帖子。然後,我可以檢查以確保所有內容都應該屬於它的位置,但這也感覺像是另一次訪問數據庫以獲取我已經擁有的信息。
如果有人能詳細闡述一下從模型到控制器傳遞數據的標準方式,那就太好了。感謝您的時間和幫助!
+1,這是主要答案,我在答案中增加了一些更直接的幫助 – 2010-11-17 20:58:22
這似乎是一個很好的解決方案,真正防止篡改和所有,我更要求,因爲它看起來像我應該我不需要用隱藏的字段清理我的表格,但不知怎的,我保留了發送到視圖的值,以便往返旅行。我可能是錯的,但我想這就是發佈這個問題的重點:-)我肯定會考慮這樣做。謝謝你的信息! – 2010-11-17 21:13:31
如果你想擺脫頁面中的id字段,你仍然需要設計一些其他方式將id傳遞給客戶端,以便在回發時傳遞它。沒辦法。 – 2010-11-17 21:15:51