我有一个控制器有两个动作。构建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视图中显示的任何其他数据。 –
根据要在视图上显示的数据创建自定义模型类总是可以的。 –
由于视图只接受单个模型绑定机制,所以最好设置包装两个模型的另一个视图模型。可以对创建的视图模型进行自定义以包含要传入视图的某些数据部分。 –