MVC中Controller与Views的关系

问题描述 投票:0回答:2

MVC Relationship

我是MVC和ASP.NET的初学者,我看过很多关于模型,视图和控制器之间关系的文章。当我尝试做一些Web示例项目时,我发现View和Controller之间的关系对我很困惑。

从上图中,如果我们想要从控制器更新视图,那么我们需要操纵模型来更新视图。

但是,如果我想传递一些简单的数据或消息在View上显示怎么办?然后我必须为它建立一个模型?我听说过Viewbag,但这不是一个好方法或安全传递数据吗?

asp.net asp.net-mvc
2个回答
0
投票

我通常使用ViewBag,因为它们对于传递简单数据非常有用。

如果要传递更复杂的数据,可能必须创建模型或编辑当前模型。

例如:

<tr id="pesquisa">
  <td>
    Nome: @Html.TextBox("nome", ViewBag.nome as string, new { @class = "form-control" })
  </td>
  <td>
    NIF: @Html.TextBox("nif", ViewBag.nif as string, new { @class = "form-control" })
  </td>
  <td>
    Contacto: @Html.TextBox("contacto", ViewBag.contacto as string, new { @class = "form-control" })
  </td>
  <td>
    Email: @Html.TextBox("email", ViewBag.email as string, new { @class = "form-control" })
  </td>
  <td>
    <br />
    <input type="submit" value="Pesquisar" align="center" class="btn btn-info" />
  </td>
</tr>

在这里,我使用ViewBag来保存搜索完成后用户在搜索区域中键入的字符串,并重新加载页面。

我希望有帮助:)


0
投票

免责声明:我认为这个问题与旧问题基本相同:您应该使用动态类型还是静态类型?双方都有很多支持者。我个人更喜欢静态打字,除非有充分的理由去动态打字。

我认为有些混淆来自于“模型”这个术语实际上可能会根据上下文引用不同的东西:

  1. 模型作为一般MVC模式中的角色
  2. 模型作为ASP.NET MVC实现中的角色
  3. 领域模型

如果从与实现无关的MVC模式的角度来看ASP.NET MVC实现,那么ModelViewBag / ViewDataTempData一起代表“MVC模型”(即从MVC控制器传递到的一段数据) MVC视图)。但是出于实际原因,ASP.NET MVC的设计者决定将单个逻辑MVC模型拆分为不同的物理实体。因此,技术上修改ViewBag / ViewData也在修改MVC模型。作为静态类型检查的支持者,我更喜欢使用ViewBag / ViewData的显式模型类。恕我直言,这提供了更好的(类型)安全性,并使代码更容易阅读:显式模型类成为View和Controller之间的契约。

请注意,“域模型”可能并且通常可能与ASP.NET模型对象不同。如果您的应用程序很简单,可以将所有逻辑放入ASP.NET控制器并使用ASP.NET模型作为域模型。但是,随着您的应用程序变得更加复杂,您可能希望将业务逻辑从ASP.NET控制器移到某些服务以便更好地重用。然后你可能会得到像MVC-inside-MVC这样的东西:你有一个业务级MVC,其中M是域模型,C是域逻辑服务,V - 由整个ASP.NET MVC堆栈表示;然后在ASP.NET MVC中你有自己的模型,视图和控制器。在这样的设计下,ASP.NET控制器变得非常薄。它映射来自HTTP的用户输入;调用一些域级服务,它执行所有逻辑并返回一些域模型;然后ASP.NET控制器将该域模型映射到其自己的模型,可能会添加一些特定于视图的字段并呈现视图。

© www.soinside.com 2019 - 2024. All rights reserved.