当Controller接收到用户端要求时,通常会依据不同的要求类型来响应不同的内容,例如,一般正常的网页浏览,你可能会响应ViewResult显示一个视图页面,但通过Ajax过来的Http请求,可能就会想响应JsonResult或HttpStatusCodeResult等。
如果我们希望在同一个Action方法中判断用户端是否通过Ajax的方式存取,在ASP.NET MVC 里提供了一个Request.IsAjaxRequest()扩充方法能够判断,使用范例如下:
1 [HttpPost] 2 //因为知道要通过Ajax调用这个Action,所以可以先标示[HttpPost]属性 3 public ActionResult Remove(int ProductId) 4 { 5 var existingCart = this.Carts.FirstOrDefault(p => p.Product.Id == ProductId); 6 if (existingCart != null) 7 { 8 this.Carts.Remove(existingCart); 9 } 10 if (Request.IsAjaxRequest()) 11 { 12 return new HttpStatusCodeResult(System.Net.HttpStatusCode.OK); 13 } 14 else 15 { 16 return RedirectToAction("Index","Cart"); 17 } 18 19 }
用户端使用Ajax发出要求,通常都是为了取得网页的部分内容,因此在实务上也经常会用IsAjaxRequest这个扩充方法来区分ViewResult与PartialViewResult,如下范例:
1 public ActionResult GetBanner() 2 { 3 var data = db.Banner.ToList(); 4 5 if (Request.IsAjaxRequest()) 6 return PartialView(data); 7 else 8 return View(data); 9 }