Asp.Net MVCのControllers

7476 ワード

次はControllerの定義です.
    public class ProductController : Controller
    {
        //
        // GET: /Product/

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult Help()
        {
            return View();
        }

        public ActionResult Details(int Id)
        {
            return View();
        }
    }

 
一、Actionにおけるreturn View()の理解
つまりActionResultです.ここでreturn View()はhtml形式の内容を返してページに表示しますが、ActionResultには多くのタイプがあります.
・View()-ViewResultを返します.
・PartialView()-PartialViewResultを返します.
・RedirectToAction()–RedirectToRouteResultを返します.
・Redirect()-RedirectResultを返します.
・Content()-ContentResultを返します.
・Json()-JsonResultを返します.
・File()-FileResultを返します.
・JavaScript()-JavaScriptResultを返します.
・RedirectToRoute()-RedirectToRouteResultを返します.
説明:
・View Result–通常のASPを表す.NET MVC view.
・PartialViewResult–ASPを表すNET MVC viewの一コマ.
・RedirectResult–別のコントロールアクションまたはURLにリダイレクトすることを示す.
return RedirectToAction("Index"); 
return RedirectToAction(“Index”, “Product”);
return RedirectToAction(“Details”, new {id=53});

 
・ContentResult–ブラウザに基本的なタイプのコンテンツを送信することを示す.Netの基本的なタイプは、string、int、doubleなどです.
 public string SayHello()  
 {  
       return "Hello";  
 }

 
・JsonResult–ブラウザにJsonタイプを返します
  
        public ActionResult List()  
        {  
            var quotes = new List<string>  
            {  
                "Look before you leap",  
                "The early bird gets the worm",  
                "All hat, no cattle"  
            };  
              
            return Json(quotes);  
        }

 
・FileResult–ダウンロード用のファイルを返します.
        public ActionResult Download()  
        {  
             
            return File("~/Content/CompanyPlans.docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "CompanyPlans.docx");  
        }  
  

 
・EmptyResult–アクションが結果を返さない
・HttpUnauthorizedResult–HTTP Unauthorized status codeを返します.
・JavaScriptResult–JavaScriptファイルを返します.
・RedirectToRouteResult–route valuesを使用して別のコントローラのactionにリダイレクト
 
二、アクションが呼び出されるのをどのように制御するか
1.AcceptVerbsの使用
コードを見てください:
        // GET: /Employee/Create  
        [AcceptVerbs(HttpVerbs.Get)]  
        public ActionResult Create()  
        {  
            return View();  
        }   
  
        // POST: /Employee/Create  
        [AcceptVerbs(HttpVerbs.Post)]  
        public ActionResult Create(Employee employeeToCreate)  
        {  
            try  
            {  
                _repository.InsertEmployee(employeeToCreate);  
                return RedirectToAction("Index");  
            }  
            catch  
            {  
                return View();  
            }  
        }  
  
        // DELETE: /Employee/Delete/1  
        [AcceptVerbs(HttpVerbs.Delete)]  
        public ActionResult Delete(int id)  
        {  
            _repository.DeleteEmployee(id);  
            return Json(true);  
        }

 
GetかPostかを制御するときにCreateというアクションをトリガーします
httpでサポートされているアクションのタイプ:
· OPTIONS – Returns information about the communication options available.
· GET – Returns whatever information is identified by the request.
· HEAD – Performs the same operation as GET without returning the message body.
· POST – Posts new information or updates existing information.
· PUT – Posts new information or updates existing information.
· DELETE – Deletes information.
· TRACE – Performs a message loop back.
· CONNECT – Used for SSL tunneling.
 
2.ActionNameの使用
        [ActionName("Edit")]  
        [AcceptVerbs(HttpVerbs.Get)]  
        public ActionResult Edit_GET(Merchandise merchandiseToEdit)  
        {  
            return View(merchandiseToEdit);  
        }

 
3.ActionMethodSelectorの使用
namespace MvcApplication1.Selectors  
{  
    public class AjaxMethod : ActionMethodSelectorAttribute  
    {  
        public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)  
        {  
            return controllerContext.HttpContext.Request.IsAjaxRequest();  
        }  
    }  
} 

 
Controllerのコード:
        [AjaxMethod]  
        [ActionName("Index")]  
        public string Index_AJAX()  
        {  
            var selectedIndex = _rnd.Next(_news.Count);  
            return _news[selectedIndex];  
        }
 
 、      :       Action   
    public class CatalogController : Controller  
    {  
         
        public ActionResult Create()  
        {  
            return View();  
        }  
  
        public ActionResult Delete(int id)  
        {  
            return View();  
        }  
  
  
        protected override void HandleUnknownAction(string actionName)  
        {  
            ViewData["actionName"] = actionName;  
            View("Unknown").ExecuteResult(this.ControllerContext);  
        }  
  
  
    }

 
HandleUnkonwnActionを使用すると、デフォルトでは404 Resource Not Foundの例外が返され、定義を再ロードできます.