构建MVC应用程序的正确方法

时间:2017-02-09 02:01:34

标签: c# asp.net-mvc asp.net-mvc-4

我有一个带2个动作的控制器。

使用Entity Framework获取数据库请求列表的第一个操作,然后视图显示它们。

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; }
}

如果查看视图代码,我会输出一个链接,将用户带到Home / SendResponse / id

这是我的不确定性所在。

SendResponse操作的目的是回复特定请求。在SendResponse视图中,我想显示一些请求模型字段,以便作者知道要在响应中包含什么。

我的具体问题是

  1. 因为我想从请求模型中显示一些数据,所以视图的模型将设置为请求模型,但视图的目的是发送响应(在响应中定义)模型)。那么我应该设置一些ViewBag。*属性,这些属性设置为请求类中的字段,并使用它们而不是请求模型,然后将我的视图模型设置为响应?

  2. 是否可以使用一个控制器来处理两个模型(在这种情况下是请求和响应)?

  3. 简而言之,我不是100%肯定如何构建一个MVC组合,它从一个模型中获取数据,然后根据该数据创建一个新模型。

1 个答案:

答案 0 :(得分:0)

典型的模式是为每个视图创建一个模型。在您的代码中,您直接从数据库发送Request对象。通常会创建一个RequestViewModel并将其发送到视图以进行反对。

当作者点击您的链接时,您将收到一个请求ID。您可以使用该ID从数据库中检索相关的Request对象,然后将其投影到ResponseEditModel中。您在此模型中包含/声明要包含在请求对象中的某些字段。你基本上复制了它们。

控制器可以与许多模型一起使用,我实际上建议在大多数情况下为每个视图做一个模型。最重要的是保持控制器的内聚性,比如处理请求和处理响应,听起来不错。