MVC中控制器和视图之间的关系

MVC关系

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

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

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


我通常使用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来保存搜索完成后用户在“搜索”区域中键入的字符串,并重新加载页面。

我希望帮助:)


免责声明 :我认为这个问题基本上和老问题一样:你应该使用动态类型还是静态类型? 双方都有很多支持者。 就个人而言,我更喜欢静态打字,除非有很好的理由去动态打字。

我认为有些混淆来自于这样一个事实,即“模型”一词实际上可能会根据上下文引用不同的事物:

  • 模型作为一般MVC模式中的角色
  • 模型作为ASP.NET MVC实现中的角色
  • 领域模型
  • 如果从实现不可知的MVC模式的角度来看ASP.NET MVC实现,那么ModelViewBag / ViewDataTempData一起表示“MVC模型”(即从MVC控制器传递到MVC视图)。 然而,由于实际的原因,ASP.NET MVC的设计者决定将单个逻辑MVC模型分解成不同的物理实体。 因此,技术上修改ViewBag / ViewData也正在修改MVC模型。 作为静态类型检查的支持者,我更喜欢使用显式模型类来使用ViewBag / ViewData 。 恕我直言,这提供了更好的(类型)安全性,并且更易于阅读代码:显式模型类成为视图和控制器之间的契约。

    请注意,“域模型”可能并经常可能与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控制器将该域模型映射到它自己的模型中,可能会添加一些特定于视图的字段并呈现该视图。

    链接地址: http://www.djcxy.com/p/30185.html

    上一篇: Relation among the Controller and Views in MVC

    下一篇: how does asp.net mvc relate a view to a controller action?