MVC专题 专题
您的位置:csharp > MVC专题专题 > ASP.Net MVC动作
ASP.Net MVC动作
作者:--    发布时间:2019-11-19

asp.net mvc操作方法负责执行请求并生成响应。默认情况下,它以actionresult的形式生成响应。操作通常具有与用户交互的一对一映射。

例如,在浏览器中输入一个url,点击任何特定的链接,提交表单等。这些用户交互中的每一个都会导致请求被发送到服务器。 在每种情况下,请求的url都包含mvc框架用来调用操作方法的信息。动作方法的一个限制是它们必须是实例方法,所以它们不能是静态方法。也没有返回值的限制。 所以可以返回字符串,整数等。

请求处理

动作是mvc应用程序中的最终请求目标,它使用控制器基类。我们来看看请求处理。

  • 当url到达时,如/home/index,这是一个urlroutingmodule,它检查并理解路由表中配置的内容并知道如何处理该url。

  • urlroutingmodule将在路由表中配置的信息放在一起,并将控制交给mvc路由处理程序。

  • mvc路由处理程序将控制器传递给作为http处理程序的mvchandler
  • mvchandler使用一个控制器工厂实例化控制器,它知道实例化哪个控制器,因为它在该控制器值的routedata中查找。
  • mvchandler有一个控制器,mvchandler唯一知道的就是icontroller接口,所以它只是告诉控制器执行。
  • 当它告诉控制器执行时,这是从mvc的控制器基类派生的。 execute方法创建一个动作调用者,并告诉动作调用者去找到一个方法来调用,找到一个调用的动作。
  • 动作调用者再次在routedata中查找并找到从路由引擎传递的动作参数。

动作类型

动作基本上返回不同类型的动作结果。actionresult类是所有操作结果的基础。 以下是不同种类的行为结果及其行为的列表。

编号 名称 行为
1 contentresult 返回一个字符串
2 filecontentresult 返回文件内容
3 filepathresult 返回文件内容
4 filestreamresult 返回文件内容
5 emptyresult 什么都不返回
6 javascriptresult 返回脚本执行
7 jsonresult 返回json格式的数据
8 redirecttoresult 重定向到指定的网址
9 httpunauthorizedresult 返回403 http状态码
10 redirecttorouteresult 重定向到不同的动作/不同的控制器动作
11 viewresult 作为视图引擎的响应收到
12 partialviewresult 作为视图引擎的响应收到

我们来看看前一章(asp.net mvc控件器mvccontrollerdemo项目)中创建employeecontroller的一个简单示例。参考以下示例代码 -

using system;
using system.collections.generic;
using system.linq;

using system.web;
using system.web.mvc;

namespace mvccontrollerdemo.controllers {
   public class employeecontroller : controller{
      // get: employee
      public actionresult search(string name){
         var input = server.htmlencode(name);
         return content(input);
      }
   }
}

当请求以下url:http://localhost:51066/employee/maxsu 时,将收到操作的输出如下 -

添加控制器

现在,在项目上再添加另一个控制器。

第1步 - 通过在解决方案资源管理器 中右键单击 controllers 文件夹来添加一个:控制器:customercontroller。选择:添加 -> 控制器 。如下所示 -

它将显示“添加基架” 对话框。如下所示 -

第2步 - 选择mvc 5控制器 - 空 选项,然后单击“添加” 按钮。添加控制器对话框将出现。
第3步 - 将名称设置为:customercontroller ,然后单击“添加” 按钮。

现在,已经在controllers文件夹中看到一个新的 c# 文件“customercontroller.cs” ,在visual studio中打开并进行编辑,如下所示 -

同样,再添加一个名为homecontroller的控制器。 以下是homecontroller.cs类的实现。参考代码 -

using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.mvc;

namespace mvccontrollerdemo.controllers
{
    public class homecontroller : controller
    {
        // get: home
        public string index()
        {
            return "this is home mvccontrollerdemo.homecontroller.index() action.";
        }
    }
}

第4步 - 运行此应用程序,将收到以下输出 -

第5步 - 在上面创建的customercontroller.cs类中添加一个方法,如以下代码 -

public string getallcustomers(){
   return @"<ul>
      <li>max su</li>
      <li>mark jasper</li>
      <li>allan java</li>
      <li>ruby jerry</li>
   </ul>";
}

第6步 - 运行该应用程序并请求url: http://localhost:51066/customer/getallcustomers ,将看到以下输出 -

也可以重定向到同一控制器的操作,甚至是不同的控制器。以下是一个简单的例子,将通过使用以下代码更改homecontroller中的代码,从homecontroller重定向到customercontroller

using system;
using system.collections.generic;
using system.linq;
using system.web;
using system.web.mvc;

namespace mvccontrollerdemo.controllers
{
    public class homecontroller : controller
    {
        // get: home
        public actionresult index()
        {
            return redirecttoaction("getallcustomers", "customer");
        }
    }
}

上面代码中,使用了redirecttoaction()方法,它有两个参数:操作名称和控制器名称。

当运行这个应用程序时,会看到默认路由将重定向到/customer/getallcustomers


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册