ASP.NET MVC (一)——深入理解ASP.NET MVC—实验一/实验二

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

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

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

clip_image016

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

clip_image017

  • Step 1.3 选择MVC 模板

clip_image018

  • Step 1.4 选择Change Authentication(改变授权),弹出对话框中选择“No Authentication”,并点击确定。

clip_image019

  • Step 2 –创建控制器
  • Step 2.1,在资源管理器中,右击controller文件夹,选择添加->Controller(控制器)

clip_image020

  • Step 2.2 选择空 MVC 5 Controller 并点击添加

clip_image021

  • Step 2.3 输入控制器的名称”TestController“,点击添加。

在这一步骤中,要特别注意千万不能删除名称中的” Controller”关键字。名称中必须包含Controller关键字。

clip_image022

  • Step 3. 创建行为方法

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

   1:  public class TestController : Controller
   2:  {
   3:      public string GetString() 
   4:     {        return "Hello World is old now. It’s time for wassup bro ;)"; 
   5:   
   6:    }
   7:  }
  • Step 4. 运行并测试 按 F5 键,在地址栏中以“ControllerName/ActionName”这样的形式输入,需要注意的输入控制器名称时,不能输入”Controller“只输入”Test”。

clip_image023

 

实验一: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 方法中返回对象值会出现什么意外情况?

请浏览以下代码

   1:  namespace WebApplication1.Controllers
   2:  {
   3:      public class Customer
   4:      {
   5:          public string CustomerName { get; set; }
   6:          public string Address { get; set; }
   7:      }
   8:      public class TestController : Controller
   9:      {
  10:          public Customer GetCustomer()
  11:          {
  12:              Customer c = new Customer();
  13:              c.CustomerName = "Customer 1";
  14:              c.Address = "Address1";
  15:              return c;
  16:          }
  17:      }
18: }

 输出结果如下所示: 

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

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

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

   1:  public override string ToString()
   2:  {
   3:       return this.CustomerName+"|"+this.Address;
   4:  }
运行结果:

clip_image025

 

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

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

6. 非public方法是什么?

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

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

使用NonAction属性修饰,如下:

  1:  [NonAction] 
   2:  public string SimpleMethod()
   3:  { 
   4:     return "Hi, I am not action method";
   5:  }
当尝试给以上Action 方法发送请求时,会获得以下结果: 

clip_image026

 

View部分

Controller是处理用户请求,并做出响应,通常情况下响应都是以显示在浏览器中,使用HTML代码,浏览器才可识别。HTML有图像,文本,输入控件等。通常称为用户界面的设计即UI层,在ASP.net MVC称为View。

实验二——深入理解View

在实验二中,创建一个简单的MVC应用,仅仅具有Controller和简单的字符串类型的返回值。让我们来了解MVC中的View部分吧。

  • Step1 –创建新的Action 方法

在TestController中添加新的Action 方法,如下:

   1:  public ActionResult GetView()
   2:  { 
   3:     return View("MyView");
   4:  }

 

  • Step 2 创建View
  • Step 2.1 右击上述创建的Action 方法,选择“添加View”

 

clip_image027

  • Step 2.2 在添加View的对话框中输入View名称“MyView”,取消选择“使用布局”的复选框,点击添加。

clip_image028

资源管理器重的Views/Test文件夹中会添加一个新的View文件。

clip_image029

  • Step3 在View中添加内容

打开MyView.cshtml 文件,并添加以下内容:

@{Layout = null;}
<!DOCTYPE html>
<html><head><meta name="viewport" content="width=device-width" />
<title>MyView</title>
</head><body>Welcome to MVC 5 Step by Step learning
</body></html>
  • Step 4. 运行 按F5键运行应用

clip_image030

实验二:Q&A

1. 为什么View会放在Test的文件夹中?

View是与放置在特定目录下的Controller相关。这个特定文件夹是以”ControllerName”命名的,并且放在View文件夹内

2. 在多个控制器中无法重用View吗?

当然可以,我们需要在将这些文件放在特定的Shared文件夹中。将View 放在Shared文件夹中所有的Controller都可用。

clip_image031

3. 单个Action 方法中可引用多个View吗?

可以,ASP.NET MVC的view和Controller不是严格的匹配的,一个Action Method可以引用多个view,而一个View也可以只被一个Action方法使用

如下代码所示:

   1:  public ActionResult GetView()
   2:  {
   3:      if(Some_Condition_Is_Matching)
   4:      { 
   5:         return View("MyView");
   6:      }
   7:      else
   8:      {
   9:         return View("YourView");
  10:      }
  11:  }

4. View函数的功能是什么?

 创建 ViewResult 对象将会渲染成视图来给用户反馈

  • ViewResult 创建了ViewPageActivator 对象
  • ViewResult 选择了正确的ViewEngine,并且会给ViewEngine的构造函数传ViewPageActivator对象的参数
  • ViewEngine 创建View类的对象
  • ViewEngine 调用View的RenderView 方法。

5. ActionResult和 ViewResult的关系是什么?

ActionResult是抽象类,而ViewResult是ActionResult的多级孩子节点,多级是因为ViewResult是ViewResultBase的子类,而ViewResultBase是ActionResult的孩子节点。

6. 什么是ContentResult?

ViewResult是HTML响应而ContentResult是标准的文本响应,仅返回字符串类型。区别就在于ContentResult是ActionResult的子类。

 

要进行ASP.ET MVC的开发,不但需要具备MVC的知识,还需要高效的工具来帮助开发。

使用 ComponentOne Studio Enterprise 中提供的 ComponentOne Studio ASP.NET MVC 版本,您能获取快速的轻量级控件来满足用户所有需求。

 

实验一总结:打开Visual studio 2013 点“文件”->新建->项目;Step 1.2 选择Web 应用,输入项目名称,选择存放路径,点击确定;Step 1.3 选择MVC 模板;Step 1.4 选择Change Authentication(改变授权),弹出对话框中选择“No Authentication”,并点击确定;

  • Step 2 –创建控制器;Step 2.1,在资源管理器中,右击controller文件夹,选择添加->Controller(控制器);Step 2.2 选择空 MVC 5 Controller 并点击添加;Step 2.3 输入控制器的名称”TestController“,点击添加,在这一步骤中,要特别注意千万不能删除名称中的” Controller”关键字。名称中必须包含Controller关键字。
    • Step 3. 创建行为方法

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

       1:  public class TestController : Controller
       2:  {
       3:      public string GetString() 
       4:     {        return "Hello World is old now. It’s time for wassup bro ;)"; 
       5:   
       6:    }
       7:  }
    • Step 4. 运行并测试 按 F5 键,在地址栏中以“ControllerName/ActionName”这样的形式输入,需要注意的输入控制器名称时,不能输入”Controller“只输入”Test”。

    Action(行为) 方法是什么?

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

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

    请浏览以下代码

     1:  namespace WebApplication1.Controllers
       2:  {
       3:      public class Customer
       4:      {
       5:          public string CustomerName { get; set; }
       6:          public string Address { get; set; }
       7:      }
       8:      public class TestController : Controller
       9:      {
      10:          public Customer GetCustomer()
      11:          {
      12:              Customer c = new Customer();
      13:              c.CustomerName = "Customer 1";
      14:              c.Address = "Address1";
      15:              return c;
      16:          }
      17:      }
      18:  }

     输出结果如下所示: 

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

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

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

     1:  public override string ToString()
       2:  {
       3:       return this.CustomerName+"|"+this.Address;
       4:  }
    运行结果:

    clip_image025

     

    即:在创建MVC框架的Web程序后,需要修改Controller中的Action方法。Action方法默认返回字符串型,若要返回指定对象值可以重写"ToString"方法。

实验二总结:Controller中会含有Action方法,可以Action方法的名称上右键添加View文件,View文件会被自动添加到View文件夹下和Controller名称相同的文件夹下;且一个view可以被多个Action方法引用,也可以只被一个Action方法引用

posted @ 2016-05-22 18:42  风清扬二代目  阅读(214)  评论(0)    收藏  举报