原文:返璞归真 asp.net mvc (3) - Controller/Action

[索引页]

[源码下载]

返璞归真 asp.net mvc (3) - Controller/Action

作者:webabcd





介绍

asp.net mvc 之 Controller 和 Action

  • Controller 类必须以字符串 "Controller" 做类名称的结尾,字符串 Controller 之前的字符串为 Controller 的名称,类中的方法名为 Action 的名称
  • Action 可以没有返回值。如果 Action 要有返回值的话,其类型必须是 ActionResult

示例

1、Controller/Action

ControllerDemoController.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Ajax; using System.IO; namespace MVC.Controllers
{
    /**//// <summary>
    /// Controller 类必须以字符串 "Controller" 做类名称的结尾,字符串 Controller 之前的字符串为 Controller 的名称,类中的方法名为 Action 的名称
    /// </summary>
    public class ControllerDemoController : Controller
    {
        // [NonAction] - 当前方法仅为普通方法,不解析为 Action
        // [AcceptVerbs(HttpVerbs.Post)] - 声明 Action 所对应的 http 方法         /**//// <summary>
        /// Action 可以没有返回值
        /// </summary>
        public void Void()
        {
            Response.Write(string.Format("<span style='color: red'>{0}</span>", "void"));
        }         /**//// <summary>
        /// 如果 Action 要有返回值的话,其类型必须是 ActionResult
        /// EmptyResult - 空结果
        /// </summary>
        public ActionResult EmptyResult()
        {
            Response.Write(string.Format("<span style='color: red'>{0}</span>", "EmptyResult"));
            return new EmptyResult();
        }         /**//// <summary>
        /// Controller.Redirect() - 转向一个指定的 url 地址
        /// 返回类型为 RedirectResult
        /// </summary>
        public ActionResult RedirectResult()
        {
            return base.Redirect("~/ControllerDemo/ContentResult");
        }         /**//// <summary>
        /// Controller.RedirectToAction() - 转向到指定的 Action
        /// 返回类型为 RedirectToRouteResult
        /// </summary>
        public ActionResult RedirectToRouteResult()
        {
            return base.RedirectToAction("ContentResult");
        }         /**//// <summary>
        /// Controller.Json() - 将指定的对象以 JSON 格式输出出来
        /// 返回类型为 JsonResult
        /// </summary>
        public ActionResult JsonResult(string name)
        {
            System.Threading.Thread.Sleep(1000);             var jsonObj = new { Name = name, Age = new Random().Next(20, 31) };
            return base.Json(jsonObj);
        }         /**//// <summary>
        /// Controller.JavaScript() - 输出一段指定的 JavaScript 脚本
        /// 返回类型为 JavaScriptResult
        /// </summary>
        public ActionResult JavaScriptResult()
        {
            return base.JavaScript("alert('JavaScriptResult')");
        }         /**//// <summary>
        /// Controller.Content() - 输出一段指定的内容
        /// 返回类型为 ContentResult
        /// </summary>
        public ActionResult ContentResult()
        {
            string contentString = string.Format("<span style='color: red'>{0}</span>", "ContentResult");
            return base.Content(contentString);
        }         /**//// <summary>
        /// Controller.File() - 输出一个文件(字节数组)
        /// 返回类型为 FileContentResult
        /// </summary>
        public ActionResult FileContentResult()
        {
            FileStream fs = new FileStream(Request.PhysicalApplicationPath + "Content/loading.gif", FileMode.Open);
            int length = (int)fs.Length;
            byte[] buffer = new byte[length];
            fs.Read(buffer, 0, length);
            fs.Close();             return base.File(buffer, "image/gif");
        }         // <summary>
        /**//// Controller.File() - 输出一个文件(文件地址)
        /// 返回类型为 FileContentResult
        /// </summary>
        public ActionResult FilePathResult()
        {
            var path = Request.PhysicalApplicationPath + "Content/loading.gif";
            return base.File(path, "image/gif");
        }         // <summary>
        /**//// Controller.File() - 输出一个文件(文件流)
        /// 返回类型为 FileContentResult
        /// </summary>
        public ActionResult FileStreamResult()
        {
            FileStream fs = new FileStream(Request.PhysicalApplicationPath + "Content/loading.gif", FileMode.Open);             return base.File(fs, @"image/gif");
        }         /**//// <summary>
        /// HttpUnauthorizedResult - 响应给客户端错误代码 401(未经授权浏览状态),如果程序启用了 Forms 验证,并且客户端没有任何身份票据,则会跳转到指定的登录页
        /// </summary>
        public ActionResult HttpUnauthorizedResult()
        {
            return new HttpUnauthorizedResult();
        }         /**//// <summary>
        /// Controller.PartialView() - 寻找 View ,即 .ascx 文件
        /// 返回类型为 PartialViewResult
        /// </summary>
        public ActionResult PartialViewResult()
        {
            return base.PartialView();
        }         /**//// <summary>
        /// Controller.View() - 寻找 View ,即 .aspx 文件
        /// 返回类型为 ViewResult
        /// </summary>
        public ActionResult ViewResult()
        {
            // 如果没有指定 View 名称,则寻找与 Action 名称相同的 View
            return base.View();
        }         /**//// <summary>
        /// 用于演示处理 JSON 的
        /// </summary>
        public ActionResult JsonDemo()
        {
            return View();
        }         /**//// <summary>
        /// 用于演示上传文件的
        /// </summary>
        public ActionResult UploadDemo()
        {
            return View();
        }         /**//// <summary>
        /// 用于演示 Get 方式调用 Action
        /// id 是根据路由过来的;param1和param2是根据参数过来的
        /// </summary>
        [AcceptVerbs(HttpVerbs.Get)]
        public ActionResult GetDemo(int id, string param1, string param2)
        {
            ViewData["ID"] = id;
            ViewData["Param1"] = param1;
            ViewData["Param2"] = param2;             return View();
        }         /**//// <summary>
        /// 用于演示 Post 方式调用 Action
        /// </summary>
        /// <remarks>
        /// 可以为参数添加声明,如:[Bind(Include = "xxx")] - 只绑定指定的属性(参数),多个用逗号隔开
        /// [Bind(Exclude = "xxx")] - 不绑定指定的属性(参数),多个用逗号隔开
        /// [Bind] 声明同样可以作用于 class 上
        /// </remarks>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult PostDemo(FormCollection fc)
        {
            ViewData["Param1"] = fc["param1"];
            ViewData["Param2"] = fc["param2"];             // 也可以用 Request.Form 方式获取 post 过来的参数             // Request.Form 内的参数也会映射到同名参数。例如,也可用如下方式获取参数  
            // public ActionResult PostDemo(string param1, string param2)             return View("GetDemo");
        }         /**//// <summary>
        /// 处理上传文件的 Action
        /// </summary>
        /// <param name="file1">与传过来的 file 类型的 input 的 name 相对应</param>
        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult UploadFile(HttpPostedFileBase file1)
        {
            // Request.Files - 获取需要上传的文件。当然,其也会自动映射到同名参数
            // HttpPostedFileBase hpfb = Request.Files[0] as HttpPostedFileBase;             string targetPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory + "Upload", Path.GetFileName(file1.FileName));
            file1.SaveAs(targetPath);             return View("UploadDemo");
        }
    }
}

2、Get 方式和 Post 方式调用 Controller 的 Demo

GetDemo.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    GetDemo
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        GetDemo</h2>
    <div>
        <%= ViewData["ID"] %></div>
    <div>
        <%= ViewData["Param1"] %></div>
    <div>
        <%= ViewData["Param2"] %></div>
        
    <form action="/ControllerDemo/PostDemo" method="post">
    <input id="param1" name="param1" />
    &nbsp;
    <input id="param2" name="param2" />
    &nbsp;
    <input type="submit" value="submit" />
    </form>
</asp:Content>

3、处理 JSON 的 Demo

JsonDemo.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    JsonDemo
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">     <script src="http://www.cnblogs.com/Scripts/jquery-1.3.2.js" type="text/javascript"></script>     <script type="text/javascript">         $.ajaxSetup({
            cache: false
        });         $(document).ready(
            function() {                 $('#loading').hide();                 $('#btnFind').click(
                    function(event) {
                        event.preventDefault();                         $('#loading').show();                         $.getJSON(
                            "/ControllerDemo/JsonResult", // 获取 JSON
                            { name: $('#txtName')[0].value },
                            function(data) {
                                $('#result').append("name: ");
                                $('#result').append(data.Name);
                                $('#result').append(" - ");
                                $('#result').append("age: ");
                                $('#result').append(data.Age);
                                $('#result').append("<br />");                                 $('#loading').hide();
                            }
                        )
                    }
                )
            }
        )
        
    </script>     <h2>
        JsonDemo</h2>
    <div style="margin: 20px 0px">
        <input id="txtName" value="webabcd" />
        &nbsp;&nbsp; <a href="#" id="btnFind">Find</a> &nbsp;&nbsp; <span id="loading" style="border: 1px solid #000000;
            background-color: #FFFFCC; vertical-align: middle; padding: 6px">
            <img src="http://www.cnblogs.com/Content/Images/loading.gif" alt="Loading" />&nbsp;Loading</span>
        <div id="result" style="margin: 10px 0px" />
    </div>
</asp:Content>

4、上传文件的 Demo

UploadDemo.aspx

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
    UploadDemo
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>
        UploadDemo</h2>
    <!--action - 调用上传文件的 Action-->
    <form action="/ControllerDemo/UploadFile" method="post" enctype="multipart/form-data">
    <input type="file" id="file1" name="file1" />
    <input type="submit" id="upload" name="upload" value="上传" />
    </form>
</asp:Content>

OK

[源码下载]

返璞归真 asp.net mvc (3) - Controller/Action的更多相关文章

  1. 尝试asp.net mvc 基于controller action 方式权限控制方案可行性

    微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...

  2. 尝试asp.net mvc 基于controller action 方式权限控制方案可行性(转载)

    微软在推出mvc框架不久,短短几年里,版本更新之快,真是大快人心,微软在这种优秀的框架上做了大量的精力投入,是值得赞同的,毕竟程序员驾驭在这种框架上,能够强力的精化代码,代码层次也更加优雅,扩展较为方 ...

  3. 返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller

    原文:返璞归真 asp.net mvc (7) - asp.net mvc 3.0 新特性之 Controller [索引页][源码下载] 返璞归真 asp.net mvc (7) - asp.net ...

  4. 返璞归真 asp.net mvc (5) - Action Filter, UpdateModel, ModelBinder, Ajax, Unit Test

    原文:返璞归真 asp.net mvc (5) - Action Filter, UpdateModel, ModelBinder, Ajax, Unit Test [索引页] [源码下载] 返璞归真 ...

  5. 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性

    [索引页][源码下载] 返璞归真 asp.net mvc (13) - asp.net mvc 5.0 新特性 作者:webabcd 介绍asp.net mvc 之 asp.net mvc 5.0 新 ...

  6. 返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model

    原文:返璞归真 asp.net mvc (8) - asp.net mvc 3.0 新特性之 Model [索引页][源码下载] 返璞归真 asp.net mvc (8) - asp.net mvc ...

  7. 返璞归真 asp.net mvc (4) - View/ViewEngine

    原文:返璞归真 asp.net mvc (4) - View/ViewEngine [索引页] [源码下载] 返璞归真 asp.net mvc (4) - View/ViewEngine 作者:web ...

  8. 返璞归真 asp.net mvc (2) - 路由(System.Web.Routing)

    原文:返璞归真 asp.net mvc (2) - 路由(System.Web.Routing) [索引页] [源码下载] 返璞归真 asp.net mvc (2) - 路由(System.Web.R ...

  9. 返璞归真 asp.net mvc (1) - 添加、查询、更新和删除的 Demo

    原文:返璞归真 asp.net mvc (1) - 添加.查询.更新和删除的 Demo [索引页] [源码下载] 返璞归真 asp.net mvc (1) - 添加.查询.更新和删除的 Demo 作者 ...

随机推荐

  1. acdream 1222 Quantization Problem [dp]

    称号:acdream 1222 Quantization Problem 题意:给出一个序列 a ,然后给出一个 n * m 的矩阵,让你从这个矩阵中选出一个序列k,使得sum(abs(ki - ai ...

  2. QT4和QT3的区别

    著名的QT库前一阵子升级到4.xx版本了,我目前在开发的一个基于QT3的软件,由于受到QThread的各种困扰,因此打算尝试将代码升级到QT4, 但是当我实际开始升级工作后,才发现QT3和QT4的变化 ...

  3. NEU月赛Segment Balls(线段树)

    问题 D: Segment Balls 时间限制: 1 Sec  内存限制: 128 MB 提交: 253  解决: 37 题目描述 Small K has recently earn money i ...

  4. linux下查看日志基本命令

    1.cat命令: 功能:1)显示整个文件. 演示样例: $ cat fileName 2)把文件串连接后传到基本输出,如将几个文件合并为一个文件或输出到屏幕. 演示样例: $ cat file1 fi ...

  5. 在Laravel中一步一步创建Packages

    首先要看一下Laravel官方文档,这是最新4.2的文档,假设想看中文的话点击此处,基本一样.这个github上的库setup-laravel4-package,也是一步一步介绍怎样创建一个包.并关联 ...

  6. Python的控制结构(转)

    首先我的工作第一语言是c/c++(面向对象子集).选择学习python一方面是因为看很多人都说python开发效率高,所以想验证一下:另一方面,Eric S. Raymond在文章:如何成为一名黑客 ...

  7. WebApi异常

    WebApi异常处理解决方案   前言:上篇C#进阶系列——WebApi接口传参不再困惑:传参详解介绍了WebApi参数的传递,这篇来看看WebApi里面异常的处理.关于异常处理,作为程序员的我们肯定 ...

  8. C#索引器的应用:自已写一个表格

    C#中索引器,在一个类中有很多的同一类型成员的时候,比较适用索引器. 环境:我们假设有一个动物园,里边有很多动物. 用法: 1.先定义一个类,这是成员的类型.在这里就是要定义一个Animal类: pu ...

  9. centos6搭建本地openstack软件源

    1.把相关软件包所有下载到本地机器 wget -np -nH –cut-dirs=1 -r -c -L –exclude-directories=repodata –accept=rpm,gz,xml ...

  10. 在spring MVC的controller中获取ServletConfig

    在使用SmartUpload进行文件上传时,须要用到srevletConfig: 假设是在servlet中写当然是非常easy实现的: private ServletConfig config; // ...