惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
月光博客
月光博客
MyScale Blog
MyScale Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
爱范儿
爱范儿
P
Proofpoint News Feed
人人都是产品经理
人人都是产品经理
Last Week in AI
Last Week in AI
罗磊的独立博客
G
Google Developers Blog
Y
Y Combinator Blog
博客园 - 【当耐特】
WordPress大学
WordPress大学
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
J
Java Code Geeks
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Visual Studio Blog
美团技术团队
宝玉的分享
宝玉的分享
Jina AI
Jina AI
小众软件
小众软件
T
Tailwind CSS Blog
A
About on SuperTechFans

博客园 - 大浪淘沙

easyui datagrid 诡异的无法显示问题 对Repository模式误用的反思和纠正 转载 SVN中trunk,branches,tags用法详解 operamasks-ui2.0 +MVC4.0+EF5.0实战 当EntityFramework遇上Json,引爆 循环引用 这颗雷 operamasks-ui2.0 +MVC4.0+EF5.0实战之四 部门管理功能及网格控件(datagrid) operamasks-ui2.0 +MVC4.0+EF5.0实战之三 业务功能区域及标签页控件(tab) operamasks-ui2.0 +MVC4.0+EF5.0实战之二 功能菜单及树形控件(Tree) operamasks-ui2.0 +MVC4.0+EF5.0实战之一 开篇及布局控件介绍 EasyUI1.3.1+MVC4.0+EF5.0 番外篇 关于前台框架的选择 EasyUI、DWZ、ligerui EasyUI1.3.1+MVC4.0+EF5.0实战之一 开篇及布局控件介绍 Asp.Net MVC4.0 官方教程拓展之一--为模型属性增加中文显示名称 Asp.Net MVC4.0 官方教程 入门指南之十--查看Detail和Delete方法 Asp.Net MVC4.0 官方教程 入门指南之九--为模型添加验证 Asp.Net MVC4.0 官方教程 入门指南之八--为Movie模型和库表添加字段 Asp.Net MVC4.0 官方教程 入门指南之七--增加搜索方法和视图 Asp.Net MVC4.0 官方教程 入门指南之六--查看Edit方法和Edit视图 Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据 Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型 Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器
大浪淘沙 · 2012-12-04 · via 博客园 - 大浪淘沙

MVC概念

MVC的含义是 “模型-视图-控制器”。MVC是一个架构良好并且易于测试和易于维护的开发模式。基于MVC模式的应用程序包含:

· Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据类。

· Views: 应用程序动态生成 HTML所使用的模板文件。

· Controllers: 处理浏览器的请求,取得数据模型,然后指定要响应浏览器请求的视图模板。

本系列教程,我们将覆盖所有这些概念,并告诉您如何使用它们来构建应用程序。

添加控制器

让我们开始创建一个控制器类。

在解决方案资源管理器里,右键点击“Controllers”,选择“新建”-》“控制器……”,输入控制器名称“HelloWorldController”,模板保持默认的选项(“空MVC控制器”),点击“添加”按钮,新增的控制器类代码如下: 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcMovie.Controllers
{
    public class HelloWorldController : Controller
    {
        //
        // GET: /HelloWorld/

        public ActionResult Index()
        {
            return View();
        }

    }
}

修改代码如下:

namespace MvcMovie.Controllers
{
    public class HelloWorldController : Controller
    {        
        public string Index()
        {
            return "这是我的<B>默认</B>方法";
        }

        public string Welcome()
        {
            return "这是欢迎方法";
        }
    }
}

在这个例子中控制器方法将返回一个字符串的HTML。本控制器被命名为HelloWorldController,代码中的第一个方法被命名为Index。让我们从浏览器中调用它。运行应用程序(按F5或CTRL + F5)。在浏览器的地址栏中输入路径“HelloWorld“(例如,在下面的示例中:http://localhost:5279/HelloWorld)。在上面的方法中,代码直接返回了一个字符串。你告诉系统只返回一些HTML,系统确实这样做了!

根据传入的URL,ASP.NET MVC调用不同的控制器类(和它们之中不同的操作方法)。使用ASP.NET MVC默认的URL路由逻辑格式,以确定哪些代码会被调用:

/[Controller]/[ActionName]/[Parameters]

URL的第一部分确定那个控制器类会被执行。因此 /HelloWorld映射到HelloWorldController控制器类。URL的第二部分确定要执行控制器类中的那个操作方法。因此 /HelloWorld/Index,会使得HelloWorldController控制器类的Index 方法被执行。请注意,我们只需要浏览 /HelloWorld路径,默认情况下会调用Index方法。如果没有明确的指定操作方法,控制器类默认调用Index方法。

浏览http://localhost:xxxx/HelloWorld/Welcome。Welcome方法会被运行并返回字符串:"这是欢迎方法”。 默认的MVC映射为/[Controller]/[ActionName]/[Parameters] ,对于这个URL,控制器类是HelloWorld,操作方法是Welcome,您还没有使用过URL的[Parameters] 部分。

让我们稍微修改一下这个例子,以便可以使用URL传递一些参数信息给控制器类(例如, /HelloWorld/Welcome?name=Tom&num=4)。改变您的Welcome 方法来包含两个参数,如下所示。需要注意的是,示例代码使用了C#语言的可选参数功能,num参数在不传值时,默认值为1。

  public string Welcome(string name,int num=1)
        {
            return "你好," + name + "," + num + "";
        }

运行您的应用程序并浏览此URL(http://localhost:xxxx/HelloWorld/Welcome?name=Tom&num=4),得到结果为“你好,Tom,4次”。你可以对参数name 和num 尝试不同的值。 ASP.NET MVC 模型绑定机制 会自动将地址栏中URL里的 查询字符串映射到您方法中的参数。

译者注:学习到这里,善于思考的读者会可能做以下尝试

 public string Welcome(string name)
 {
   return "你好," + name ;
 }

在浏览器中输入:http://localhost:5279/HelloWorld/Welcome/Tom,结果发现输出为“你好,”,并没有输出期望的“你好,Tom”。

不是/[Controller]/[ActionName]/[Parameters]吗?此处为什么无法获取url中传入的参数呢?此处跟路由约定有关,默认情况下,参数标识符为ID,方能正确传入,如下所示修改

public string Welcome(int ID)
{
   return "ID:" + ID;
}


此问题此处一提,读者可不用深究,日后自然有介绍其原理的地方。 

在这两个例子中,控制器一直在做着MVC中“VC”部分的职能, 也就是视图和控制器的工作。该控制器直接返回HTML内容。通常情况下,您不会让控制器直接返回HTML,因为这样代码会变得非常的繁琐。相反,我们通常会使用一个单独的视图模板文件来帮助生成返回的HTML。让我们来看看下面我们如何能做到这一点吧。

本教程所有文章导航

本系列共10篇文章,翻译自Asp.Net MVC4 官方教程,由于本系列文章言简意赅,篇幅适中,从一个示例开始讲解,全文最终完成了一个管理影片的小系统,非常适合新手入门Asp.Net MVC4,并由此开始开发工作。

原文供9篇文章,译者将其中第6篇拆成了2篇

1. Asp.Net MVC4 入门介绍

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/03/2800210.html

2. 添加一个控制器

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-controller

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/04/2801949.html

3. 添加一个视图

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-view

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/04/2801988.html

4. 添加一个模型

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-model

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/05/2803012.html

5. 从控制器访问数据模型

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/accessing-your-models-data-from-a-controller

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/05/2803429.html

6. 查看Edit方法和Edit视图

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-edit-methods-and-edit-view

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/05/2804100.html

       http://www.cnblogs.com/seawaving/archive/2012/12/06/2804590.html

7. 为Movie模型和库表添加字段

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-a-new-field-to-the-movie-model-and-table

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/06/2805401.html

8. 为模型添加验证

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/adding-validation-to-the-model

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/06/2806322.html

9. 查看Detail和Delete方法

· 原文地址:http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/examining-the-details-and-delete-methods

· 译文地址:http://www.cnblogs.com/seawaving/archive/2012/12/10/2811064.html