【问题标题】:Understanding MVC4 Controllers了解 MVC4 控制器
【发布时间】:2013-01-05 22:33:13
【问题描述】:

我对 .net 框架和整个 MVC 编程理念还很陌生。有人可以澄清并给我一个基本的解释控制器如何使用 C# 与站点交互吗?我了解如何用 C# 编写代码,并且了解框架的某些方面,但我不明白它们是如何联系在一起的。

【问题讨论】:

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


【解决方案1】:

模型 - 是表示某种对象(通常是一个)的数据结构。它的目的是读取、写入和管理对底层对象的访问,目的是保持应用程序状态。

视图 - 是用于向用户显示可视界面的组件,可能使用模型。它可能是一个简单的表格,也可能是一个复杂的组合成一个完整的网页。

控制器 - 位于视图和模型之间的用户驱动的应用程序逻辑层。它处理用户交互、加载模型并将视图发送给用户。它根据用户请求确定将什么模型发送到视图。

应用程序的整体文件夹结构可能如下所示。

>> Website
     >> Controllers
     >> Models
     >> Views

在 C# MVC 中,每个控制器的名称中必须有后缀 Controller,它们必须扩展 Controller 类并在视图文件夹中具有名称前缀的文件夹(不带 Controller)。然后,此文件夹将包含与控制器上的特定操作相关的所有视图。

控制器可以包含定义为公共功能的任意数量的操作。默认情况下,当从控制器操作返回结果时,视图的名称必须与操作的名称相对应。但是,您也可以按名称指定视图。从控制器加载视图时,可以将对象作为模型发送到视图并在那里生成其内容。

控制器可以加载任何模型并且不受任何限制。

一个Account 控制器定义如下,带有一个动作Login。控制器放置在/Controllers 文件夹中的AccountController.cs 文件中,并且此控制器的所有视图(在此实例中为Login,文件名为Login.cshtml)都放置在/Views/Account 文件夹中。

注意:命名约定必须正确,因为控制器和视图之间使用名称来链接数据。

public class AccountController : Controller
{
    public ActionResult Login(string returnUrl)
    {
        if (User.Identity.IsAuthenticated)
        {
            return RedirectToAction("Index","Site");
        }

        return View("Login", new LogOnModel());
    }
}

可以通过http://www.mysite.com/Account/Login 访问。如果用户通过身份验证,控制器将重定向到主站点控制器,如果用户未登录,则会显示Login 视图,该视图从指定的LogOnModel 加载数据。

这实际上只是触及了可能的表面。阅读一些关于 ScottGu 的优秀文章的在线信息,这些文章更深入地向您介绍如何使用 MVC。

ASP.NET MVC Framework Overview

ASP.NET MVC Framework How To - Part 1 //Part 2 //Part 3 //Part 4

注意:这些文章是在 2007 年为 MVC 版本 1 编写的,因此有些过时,但模型、视图和控制器如何交互的概念仍然适用。

【讨论】:

  • 真正挖掘这个例子。谢谢。
  • 解释清楚。惊人的!谢谢... :)
【解决方案2】:

控制器在某种程度上充当内部 Web 服务。它们将您的服务器端代码公开给您的视图,并允许它们调用控制器。在模式方面,大多数人认为控制器应该尽可能薄。如果有繁重的工作或其他业务逻辑,您应该将其抽象到应用程序的另一部分。在我看来,控制器的作用是为视图提供可调用的内容,然后返回该数据,无论是 text/html、json 还是 xml。

这里有大量信息,直接来自来源:http://www.asp.net/mvc/mvc4

特别是该网站,我强烈推荐该教程。它将让您更清楚地了解模型、视图和控制器如何交互和相互依赖。 http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

【讨论】:

    【解决方案3】:

    控制器是一个具有方法的类,这些方法称为操作,您将这些操作附加到“视图”(cshtml 文件)。

    //This is your controller
    public class HomeController : Controller
    {
        // This is your action
        public ActionResult Index()
        {
            return View();
        }
    }
    

    您可以右键单击“索引”操作并选择“添加视图...”,这将创建一个附加到该操作的新视图。

    为了访问该视图,您将执行以下操作:localhost/Controller/Action 在这种情况下,它应该是:localhost/Home/Index 其中 Home = Controller,Index = Action

    你应该阅读the MVC pattern

    微软有一些非常好的tutorials for beginers

    【讨论】:

      【解决方案4】:

      ASP.NET MVC 中的控制器是一个处理应用程序逻辑以响应请求的对象。它将根据请求(例如 HTTP 请求)创建,并且在视图层创建响应之前可用。之后它将成为一个不可用的对象(很快 GC 将释放其分配的内存),并且对于另一个请求,必须创建一个新的控制器对象,依此类推。

      我认为根据这个定义,为什么它必须是轻量级的以及你必须如何使用它是显而易见的。

      【讨论】:

        猜你喜欢
        • 2013-11-22
        • 2013-04-08
        • 1970-01-01
        • 2011-07-11
        • 2010-12-31
        • 2013-10-14
        • 2013-09-22
        • 2014-01-16
        • 2014-02-12
        相关资源
        最近更新 更多