返璞归真 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> 
void Void() void Void() 
                { 
                        Response.Write( string.Format( "<span style='color: red'>{0}</span>", "void")); 
                } 

                /** <summary> 
                /// 如果 Action 要有返回值的话,其类型必须是 ActionResult 
                /// EmptyResult - 空结果 
                /// </summary> 
ActionResult EmptyResult() ActionResult EmptyResult() 
                { 
                        Response.Write( string.Format( "<span style='color: red'>{0}</span>", "EmptyResult")); 
                        return  new EmptyResult(); 
                } 

                /** <summary> 
                /// Controller.Redirect() - 转向一个指定的 url 地址 
                /// 返回类型为 RedirectResult 
                /// </summary> 
ActionResult RedirectResult() ActionResult RedirectResult() 
                { 
                        return base.Redirect( "~/ControllerDemo/ContentResult"); 
                } 

                /** <summary> 
                /// Controller.RedirectToAction() - 转向到指定的 Action 
                /// 返回类型为 RedirectToRouteResult 
                /// </summary> 
ActionResult RedirectToRouteResult() ActionResult RedirectToRouteResult() 
                { 
                        return base.RedirectToAction( "ContentResult"); 
                } 

                /** <summary> 
                /// Controller.Json() - 将指定的对象以 JSON 格式输出出来 
                /// 返回类型为 JsonResult 
                /// </summary> 
ActionResult JsonResult() 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> 
ActionResult JavaScriptResult() ActionResult JavaScriptResult() 
                { 
                        return base.JavaScript( "alert('JavaScriptResult')"); 
                } 

                /** <summary> 
                /// Controller.Content() - 输出一段指定的内容 
                /// 返回类型为 ContentResult 
                /// </summary> 
ActionResult ContentResult() ActionResult ContentResult() 
                { 
                         string contentString =  string.Format( "<span style='color: red'>{0}</span>", "ContentResult"); 
                        return base.Content(contentString); 
                } 

                /** <summary> 
                /// Controller.File() - 输出一个文件(字节数组) 
                /// 返回类型为 FileContentResult 
                /// </summary> 
ActionResult FileContentResult() 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> 
ActionResult FilePathResult() ActionResult FilePathResult() 
                { 
                        var path = Request.PhysicalApplicationPath +  "Content/loading.gif"
                        return base.File(path,  "image/gif"); 
                } 

                // <summary> 
                /** Controller.File() - 输出一个文件(文件流) 
                /// 返回类型为 FileContentResult 
                /// </summary> 
ActionResult FileStreamResult() ActionResult FileStreamResult() 
                { 
                        FileStream fs =  new FileStream(Request.PhysicalApplicationPath +  "Content/loading.gif", FileMode.Open); 

                        return base.File(fs,  @"image/gif"); 
                } 

                /** <summary> 
                /// HttpUnauthorizedResult - 响应给客户端错误代码 401(未经授权浏览状态),如果程序启用了 Forms 验证,并且客户端没有任何身份票据,则会跳转到指定的登录页 
                /// </summary> 
ActionResult HttpUnauthorizedResult() ActionResult HttpUnauthorizedResult() 
                { 
                        return  new HttpUnauthorizedResult(); 
                } 

                /** <summary> 
                /// Controller.PartialView() - 寻找 View ,即 .ascx 文件 
                /// 返回类型为 PartialViewResult 
                /// </summary> 
ActionResult PartialViewResult() ActionResult PartialViewResult() 
                { 
                        return base.PartialView(); 
                } 

                /** <summary> 
                /// Controller.View() - 寻找 View ,即 .aspx 文件 
                /// 返回类型为 ViewResult 
                /// </summary> 
ActionResult ViewResult() ActionResult ViewResult() 
                { 
                        // 如果没有指定 View 名称,则寻找与 Action 名称相同的 View 
                        return base.View(); 
                } 

                /** <summary> 
                /// 用于演示处理 JSON 的 
                /// </summary> 
ActionResult JsonDemo() ActionResult JsonDemo() 
                { 
                        return View(); 
                } 

                /** <summary> 
                /// 用于演示上传文件的 
                /// </summary> 
ActionResult UploadDemo() ActionResult UploadDemo() 
                { 
                        return View(); 
                } 

                /** <summary> 
                /// 用于演示  Get 方式调用 Action 
                /// id 是根据路由过来的;param1和param2是根据参数过来的 
                /// </summary> 
                [AcceptVerbs(HttpVerbs. Get)] 
ActionResult GetDemo() 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)] 
ActionResult PostDemo() ActionResult PostDemo(FormCollection fc) 
                { 
                        ViewData[ "Param1"] = fc[ "param1"]; 
                        ViewData[ "Param2"] = fc[ "param2"]; 

                        // 也可以用 Request.Form 方式获取 post 过来的参数 

                        // Request.Form 内的参数也会映射到同名参数。例如,也可用如下方式获取参数     
ActionResult PostDemo() ActionResult PostDemo( string param1,  string param2) 

                        return View( "GetDemo"); 
                } 

                /** <summary> 
                /// 处理上传文件的 Action 
                /// </summary> 
                /// <param name= "file1">与传过来的 file 类型的 input 的 name 相对应</param> 
                [AcceptVerbs(HttpVerbs.Post)] 
ActionResult UploadFile() 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" /> 
          
        <input id= "param2" name= "param2" /> 
          
        <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( 
()() { 

                                $( '#loading').hide(); 

                                $( '#btnFind').click( 
()(event) { 
                                                event.preventDefault(); 

                                                $( '#loading').show(); 

                                                $.getJSON( 
                                                         "/ControllerDemo/JsonResult", // 获取 JSON 
                                                        { name: $( '#txtName')[0].value }, 
()(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" /> 
                   <a href= "#" id= "btnFind">Find</a>    <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" /> 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>
 
 



     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/341602,如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值