AjaxMVC – Action和ActionResult

Action

 定义在Controller中之Action方法返回ActionResult对象,ActionResult是对准Action执行结果的卷入,用于最终对要进行响应。HTTP是一个光的以请求/回复消息交换模式的网络协议,Web服务器在接并拍卖来自客户端的伸手后会基于处理结果对要与响应,最终之处理体现于针对对象Action方法的推行。

 public class MyController : Controller {
     public ActionResult MyActionMethod() {
         ...
         return xxx;
     }
 }

本着Action方法的要求:

  •  public的实例方法,返回ActionResult类型;
  •  不能够是范型方法,不克吃重载;
  •  没有标明NonActionAttribute特性(NoAction);

对controller类的渴求:

  • MVC中负有的controller类必须盖”Controller”后缀来命名;

    public abstract class ControllerBase : IController
    {

     public ControllerContext ControllerContext { get; set; }
    

    }
    public abstract class Controller : ControllerBase, …
    {

      public HttpResponseBase  Response { get; }
      public HttpContextBase  HttpContext { get; }
    

    }

  • 直运用就读之Response属性表示即之HttpResponse对象,实现对要的应;

  • 间接利用表示手上HTTP上下文的HttpContext属性和表示Controller上下文的ControllerContext属性获取用于应请求的HttpResponse对象;

 实际被,并无以HttpResponse直接指向要响应,而是以呼吁响应落实以一个ActionResult对象中,最终之求响应落实以抽象方法ExecuteResult()中。

    HttpResponseBase response = context.HttpContext.Response 

ActionResult

 抽象类,ActionResult是Controller中Action的回来路,Action方法可回到一个直/间接从ActionResult抽象类继承的型。默认ControllerActionInvoker调用ActionResult.ExecuteResult()方法变请求响应结果。

namespace System.Web.Mvc {
    public abstract class ActionResult {
        protected ActionResult();  // 构造函数
        public abstract void ExecuteResult(ControllerContext context);  // 用于子类重写
    }
}

EmptyResult

 空结果。如果Action方法返回NULL或void,MVC将那易成EmptyResult对象。 

public class EmptyResult : ActionResult {
     public EmptyResult();
     public override void ExecuteResult(ControllerContext context);
}

ContentResult

 用户定义的纯文本内容类型,调用Response.Write()将字符串直接向客户端输出。如果Action方法返回非ActionResult对象,MVC将略地盖回到对象的ToString()内容呢底蕴来一个ContentResult对象并回。

public class ContentResult : ActionResult {
     public ContentResult();    
     public Encoding ContentEncoding { get; set; }
     public string ContentType { get; set; }
     public string Content { get; set; }  
     public override void ExecuteResult(ControllerContext context);
}

里头,contentType是文档类型,contentEncoding是编码方式。

 抽象类Controller定义多单重载方法根据指定的情、编码方式和媒体类型创建相应的ContentResult对象:

public abstract class Controller : ControllerBase, ... {
     protected ContentResult Content(string content, xxx);    
     protected virtual ContentResult Content(string content, string contentType, Encoding contentEncoding);
}

JsonResult

 序列化的Json对象,将点名对象序列化为Json字符串,再调用Response.Write()将字符串写副到HTTP输出流。MVC将Response.ContentType设置也application/json,通过JavaScriptSerializer类将点名对象序列化为Json表示法。默认情况下,MVC不同意GET请求返回Json结果,可拿JsonRequestBehavior属性设置为AllowGet以解除限制。

public class JsonResult : ActionResult {
     public JsonResult();
     public Encoding ContentEncoding { get; set; }
     public string ContentType { get; set; }
     public object Data { get; set; }
     // 指示是否允许来自客户端的 HTTP GET 请求
     public JsonRequestBehavior JsonRequestBehavior { get; set; }
     public override void ExecuteResult(ControllerContext context);
}
 // 允许/拒绝支持对HTTP-GET请求的响应
 public enum JsonRequestBehavior{ AllowGet, DenyGet }

 CLR对象以及Json格式字符串的序列化/反序列化过程由于序列化器JavaScriptSerializer来成功:

public class JavaScriptSerializer {
     public int MaxJsonLength {  get; set; }   // Json格式字符串
     public int RecursionLimit { get; set; }
     public string Serialize(object obj);   // 序列化 
     public void Serialize(object obj, StringBuilder output);
     public object Deserialize(string input, Type targetType);   // 反序列化    
     public object DeserializeObject(string input);
}

 抽象类Controller定义多独重载方法根据指定的始末、编码方式、媒体类型和JsonRequestBehavior值创建相应的JsonResult对象:

public abstract class Controller : ControllerBase, ... {
     protected internal JsonResult Json(object data, xxx);
     protected internal virtual JsonResult Json(object data, xxx);
}

 Json

 JavaScript Object
Notation,轻量级的数据交换格式,是JavaScript的原生格式,采用完全独立于言语的文本格式,是漂亮的数据交换语言。Json是全然动态的,允许在Json的布局中改变多少的意味方法。

  • 易编写阅读、解析生成,提升网络传输速率;
  • 数在键值对吃,数据由逗号隔开,花括号保存对象,方括号保存数组;
  • Json格式和XML格式可以互相转化;

JavaScriptResult

 允许在服务端动态生成一段JS脚本用于客户端执行之,并是作为请求的应。ExecuteResult()方法以脚本内容写副当前HttpResponse,并将媒体类型设置为“application/x-javascript”。返回路为JavaScriptResult的Action方法一般用于拍卖Ajax请求。

public class JavaScriptResult : ActionResult {
     public JavaScriptResult();
     public string Script { get; set; }   // JS脚本
     public override void ExecuteResult(ControllerContext context);
}

 抽象类Controller中定义了一个JavaScript方法根据指定的下面论字符串创建一个JavaScriptResult对象:

public abstract class Controller : ControllerBase, ... {
     protected virtual JavaScriptResult JavaScript(string script);
 }

ViewResult

 HTML的页面内容,用于呈现数据。由于Controller和连锁Service已经处理完了作业逻辑并拿结果于包改成Model实体,View需要得到Model并拿其转为Html。

参考:

  • ActionResult参考示例; MVC –
    Action和ActionResult;
  • EmptyResult &
    ContentResult; JavaScriptResult
    &
    JsonResult;

 

相关文章