zoukankan      html  css  js  c++  java
  • 返璞归真asp.net mvc 1.0(3) Controller/Action【转】

    介绍
    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(2031) };
                
    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; <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>
  • 相关阅读:
    《ASP.NET 本质论》源码下载
    将 Excel 导入到 SharePoint 列表
    使用 jQuery dataTables 3 解析请求参数
    数据库表的转置
    翻译:使用 Entity Framework 4.x 进行代码优先 (CodeFirst) 开发
    转贴:是K2,還是WF(Workflow Foundation)?
    EF CodeFirst 自定义表映射
    CRC原理及其逆向破解方法
    空间坐标转换
    Post Process
  • 原文地址:https://www.cnblogs.com/cxd4321/p/1568345.html
Copyright © 2011-2022 走看看