ASP.NET MVC controller 和 action

本文详细介绍了在MVC框架中如何从请求中获取参数,并通过多种方式返回ActionResult对象,包括使用ViewResult、RedirectResult、ContentResult、JsonResult和FileResult等。同时,解释了如何向视图传递数据以及如何处理不同类型的返回结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 在 action 方法中获取本次请求的参数和值,有以下两种办法可以实现:
    1.1 最直接的方式, 从上下文对象中获取。通常情况下,我们的controller类都是继承自 System.Web.Mvc.Controller 类,这个父类中有好几个对象,在我们的控制器类中可以直接使用,如,Request , Response , RouteData , HttpContext , Server, Session 等。下面列举一些常用的情况
     
属性类型描述
Request.QueryStringNameValueCollection从本次Get请求中获取查询字符串的变量和值
Request.FormNameValueCollection从本次Post请求中获取变量和值
Request.CookieHttpCookieCollection本次请求中,浏览器发送的Cookie值
Request.UriUri请求的URL路径
RouteData.ValuesRouteValueDictionary路由参数
HttpContext.SessionHttpSessionStateBase获取session中的键值
UserIPrincipal获取当前用户的授权信息
      
        我们在 action 中会这样用
      
        public ActionResult Index()
        {
            string info = Request.QueryString["info"] ;
            ViewBag.Info = info ;
            return View();
        }
    1.2 从 action 的参数中获取 。当处理请求时,MVC框架会自动从Request.QueryString ,Request.Form ,Request.RouteData.Values 等集合中根据参数名为参数赋值,这些参数不能包含 out 和 ref 关键字 ,大小写不敏感 
    
   
        public ActionResult Index( string info )
        {
            ViewBag.Info = info ;
            return View();
        }
    绑定参数大概经过这么一个过程,首先,由 data provider 去从上述的几个几何对象中取出值 ,然后赋给data binder ,由 data binder 进行验证、类型转换等操作,然后把值赋给 action 的参数  这个参数的类型可以是任意的 .net 类型 ,具体的绑定方式会在以后的文章中具体说。如果 model binder 无法为某个参数赋值,那么,可能为这个值赋默认值(值类型和引用类型的默认值不一样),也可能抛出异常。为了避免这种情况的发生,我们可以手动地为 action 的参数赋默认值,如下面代码所示:
       public ActionResult Index( string info ="Hello , World !" )
        {
            ViewBag.Info = info ;
            return View();
        }
    如果MVC框架未能给 info 变量赋值,那么它的值就是默认值“Hello,World!”。
 
2. 返回多种 ActionResult 对象。当 action 方法执行完以后,要给请求的用户返回数据。我们可以让 action 方法返回 HTML ,或者Response.Redirect 到一个新的URL,但是,这样子一方面写代码的效率低,而且不容易维护,不利于单元测试。我们可以简单地返回一个 ActionResult 对象。
      
Type描述方法名
ViewResult显示指定的或默认的View模板View
PartialViewResult显示指定的或默认的部分页模板PartialView
RedirectToRouteResult重定向

RedirectToAction , RedirectToActionPermanent ,

RedirectToRoute ,  RedirectToRoutePermanent

RedirectRestult重定向Redirect ,RedirectPermanent
ContentResult返回纯文本信息Content
FileResult返回二进制文件到浏览器File
JsonResult将一个.net 对象序列化为Json字符串返回Json
HttpUnauthorizedResult返回HTTP 401 
HttpNotFountResult找不到指定文件 404HttpNotFound
 
    3.  返回ViewResult 。 从action 向视图传递数据可以通过以下三种方式
            3.1 向视图传递一个 Model 对象,接收数据的视图应该是一个强类型的视图。
              
  public ActionResult About()
  {
      DateTime date = DateTime.Now;
      return View( date );
  }    
               视图页面调用方式 
                @model DateTime
                @Model.Month
 
            3.2 通过ViewBag向视图传递数据。由于ViewBag是 dynamic 类型的,所以,我们可以给 ViewBag 赋任何属性的值
            
public ActionResult About()
{ ViewBag.Date
= DateTime.Now; ViewBag.Message=“hello , world!”; return View(); }
                视图页面的调用方式
                @ViewBag.Date
                @ViewBag.Message
 
            3.3 通过 ViewData 向视图传递数据。 
            
public ActionResult About()
{
   ViewData["Date"] = DateTime.Now;
   ViewData["Message"]=“hello , world!”;
   return View();
}

 

                视图页面的调用方式(需要强制类型转换)
 
                @ViewData["Date"]
                @ViewData["Message"]
 
    4  返回 RedirectResult 对象。RedirectResult 分为两种,第一种是通常意义上的跳转,第二种是永久跳转 ,既,在浏览器中通过“后退“是退不回来的,这种跳转的方法名上都是以 "Permanent" 结尾的,例如,RedirectToActionPermanent , RedirectToRoutePermanent 等。各种方法只需要根据重载的参数即可使用,此处就不做介绍了。
 
    5. 返回 ContentResult 对象。 如果想返回文本信息,如 XML , HTML ,或者纯文本信息,可以返回ContentResult对象。
    
    return Content("This is content", "text/plain", System.Text.Encoding.Default);
 
    6. 返回 JsonResult 对象 。Json是一种目前比较流行的跨平台的纯文本格式,一般用于Ajax技术。
    return Json(JsonData) ;
    
    7. 返回 FileResult 对象 。一般用于提供文件下载。
    return File("fileName" , "contentType" ,"downloadName") ; 
    
    8. 返回错误信息或返回HTTP代码
    
    return new HttpStatusCodeResult(404, " URL not found 。。。") ;
    或者返回封装好的方法   return HttpNotFound() ;
    
 
 
 
 
 
 

转载于:https://www.cnblogs.com/zdkai/archive/2013/04/13/3018504.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值