1. 首页
  2. .Net, MVC

ASP.NET MVC (二)——理解Asp.Net MVC的Controller(控制器)

为了我们能够更好的理解Controller,我们首先需要理解Controller中涉及的专业术语:用户交互逻辑。

什么是用户交互逻辑?

场景1

你是否想过当用户输入URL摁下回车键时,会发生什么事情?

浏览器首先需要给服务器发送请求,服务器再做出响应。

通过这些请求之后,客户端正尝试与服务器交互,服务器能够反馈响应,因为服务器端存在一些判断逻辑来处理这些请求。这些能够处理用户请求以及用户交互行为的业务逻辑称为用户交互逻辑。

场景2

有一种常见的情况,服务器端发送的请求是HTML请求。HTML请求是由一组输入控件和提交按钮组成的。

当用户点击“Save”按钮之后会发生什么?

如果你的回答是有一些事件处理器来处理button点击事件,那么很抱歉回答是错误的。

在Web编程中是没有事件的概念的,Asp.net Web forms 根据我们的行为自动添加了处理代码,所以给我们带来的错觉认为是事件驱动的编程。这只是一种抽象的描述。

当点击Button时,一个简单的HTTP请求会发送到服务器。差别在于Customer Name,Address以及Age中输入的内容将随着请求一起发送。最终,如果是有个请求,服务器端则有对应的逻辑,使服务器能够更好响应请求。简单来说是将用户交互逻辑写在服务器端。

在Asp.Net MVC中,C代表Controller,就是用来处理用户交互逻辑的。

实验一:简单的MVC Hello world,着重处理Controller。

Step1 创建一个Asp.Net MVC 5项目

1、打开Visual studio 2013 点“文件”->新建->项目。

2、选择Web 应用,输入项目名称,选择存放路径,点击确定。

3、选择MVC 模板

Step 2 –创建控制器

1、在资源管理器中,右击controller文件夹,选择添加->Controller(控制器)


2、选择空 MVC 5 Controller 并点击添加


3、输入控制器的名称”TestController“,点击添加。在这一步骤中,要特别注意千万不能删除名称中的” Controller”关键字。名称中必须包含Controller关键字。

Step 3. 创建行为方法

打开新建的TestController 类,可以发现已生成的Index 方法,将该方法删除,并且添加新方法命名为GetString ,代码如下:

 public class TestController : Controller
{
     public string GetString() 
     {       
          return "Hello World is old now. It’s time for wassup bro ;)";    
    }
}

Step 4. 运行并测试 按 F5 键,在地址栏中以“ControllerName/ActionName”这样的形式输入,需要注意的输入控制器名称时,不能输入”Controller“只输入”Test”。

实验一:Q&A

1. TestController 和Test之间的关系是什么?

TestController是类名称,而Test是Controller的名称,请注意,当你在URL中输入controller的名称,不需要输入Controller这个单词。

2. Action(行为) 方法是什么?

Action 方法 简单的来说就是一个Controller内置的public类型的方法,能够接收并处理用户的请求,上例中,GetString 方法返回了一个字符串类型的响应。

注意:在Asp.Net Web Forms中默认的返回请求是HTML的,如果需要返回其他类型的请求,就必须创建HTTP 处理器,重写内容类型。这些操作在Asp.net中是很困难的。在Asp.net MVC中是非常简单的。如果返回类型是”String“直接返回,不需要发送完整的HTML。

3. 如果从Action 方法中返回对象值会出现什么意外情况?

请浏览以下代码

namespace WebApplication1.Controllers
{
     public class Customer
     {
         public string CustomerName { get; set; }
          public string Address { get; set; }
      }

     public class TestController : Controller
     {
         public Customer GetCustomer()
          {
              Customer c = new Customer();
              c.CustomerName = "Customer 1";
             c.Address = "Address1";
             return c;
         }
      }
}

输出结果如下所示: 

当返回类型如“Customer”这样类似的对象时,将调用ToString()方法,返回“NameSpace.ClassName”形式的类名。

如果需要获得上面例子中的属性值,要如何操作?

简单重写类的“ToString”方法,如下:

public override string ToString()
{
     return this.CustomerName+"|"+this.Address;
}

运行结果:

4. Action 方法是否只能用Public修饰符来修饰?

答案是肯定的,每个公有方法都会自动称为Action 方法。

5. 非public方法是什么?

类的方法都比较简单,并且并不是公共可用的。无法在Web中调用。

6. 如果我们需要其他函数来完成一些特定功能,但不是Action Method要如何实现?

使用NonAction属性修饰,如下:

[NonAction] 
public string SimpleMethod()
{ 
    return "Hi, I am not action method";
}

当尝试给以上Action 方法发送请求时,会获得以下结果: 

评分 0, 满分 5 星
0
0
看完收藏一下,下次也能找得到
  • 版权声明:本文基于《知识共享署名-相同方式共享 3.0 中国大陆许可协议》发布,转载请遵循本协议
  • 文章链接:http://www.yhy0.com/net_20160707_326.html [复制] (转载时请注明本文出处及文章链接)
上一篇:
:下一篇