我有一個控制器有兩個動作。構建MVC應用程序的正確方法
使用實體框架獲取數據庫請求列表的第一個操作,然後視圖顯示它們。
public class HomeController : Controller
{
public ActionResult HelpRequests()
{
using (var context = new MyDbContext())
{
var items = context.Requests.ToList();
return View(items);
}
}
}
的觀點是:
@model List<Request>
@foreach (var request in Model)
{
<tr>
<td>
@Html.DisplayFor(model => request.Id)
</td>
<td>
@Html.DisplayFor(model => request.Title)
</td>
<td>
@Html.DisplayFor(model => request.Message)
</td>
<td>
@Html.DisplayFor(mode => request.CreateDate)
</td>
<td>@Html.ActionLink("Reply", "SendResponse", new { id = request.Id })</td>
</tr>
}
最後一個請求,該模型是
public partial class Request
{
public int Id { get; set; }
public string Title { get; set; }
public string Message { get; set; }
public System.DateTime CreateDate { get; set; }
public Nullable<bool> Responded { get; set; }
}
如果你看一下視圖代碼I輸出一個鏈接,將用戶帶到首頁/ SendResponse /編號
這就是我不確定性的地方。
SendResponse操作的目的是回覆特定的請求。在SendResponse視圖中,我想顯示一些請求模型字段,以便作者知道應包含哪些內容。
我的具體問題是
因爲我想要顯示從請求模型的一些數據,該視圖的模型將被設置爲請求模型,但視圖的目的將是發送一個響應(在響應模型中定義)。所以,我應該只設置一些ViewBag。*屬性設置爲請求類中的字段,並使用它們而不是請求模型,然後將我的視圖模型設置爲響應?
有一個控制器處理兩個模型(在這種情況下是請求和響應)是好的/最佳做法?
總之,我對如何構建MVC組合從一個模型中獲取數據,然後創建基於該數據的新的模型只是沒有100%確定。
在SendResponse控制器操作中,您可以從數據庫獲取所提供ID的請求數據。您可以創建另一個模型類,它可以包裝來自數據庫的請求數據以及您想要在SendResponse視圖中顯示的任何其他數據。 –
根據要在視圖上顯示的數據創建自定義模型類總是可以的。 –
由於視圖只接受單個模型綁定機制,所以最好設置包裝兩個模型的另一個視圖模型。可以對創建的視圖模型進行自定義以包含要傳入視圖的某些數據部分。 –