ASP.NET MVC 从入门到放弃(Day17)-MVC控制器(Controller)介绍

接下来讲讲Controller 部分...

首先启始路由在 方案总管-> App_Start资料夹底下的RouteConfig

defaults里面的controller对应着方案总管-> Controller资料夹底下的HomeController.cs档里的Index action(ActionResult) 为启始路由
https://ithelp.ithome.com.tw/upload/images/20210908/20140001207Rc1JKvq.png

public class HomeController : Controller
{
        public ActionResult Index()
        {
            return View();
            //跑到这段的时候会跳到显示画面 在方案总管-> View资料夹底下->Home资料夹->Index.cshtml
        }
}

注解:或者可在程序Index()上方按下右键点选移置检视
https://ithelp.ithome.com.tw/upload/images/20210908/20140001eu1Ay12DAa.png

如果自己的启始路由不是HomeController 想要改成LoginController也可以改成

public static void RegisterRoutes(RouteCollection routes)
{
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional });

}

一开始系统开启网页的路径为启始路由->找到对应的Controller->找到对应的Action->在从Action里面的View转到检视画面

ActionResult 预设为回传View() 显示画面,如果不想要回传显示画面还有以下几个方法

回传字串

public string Index()
{
   return "aa";
}

导入其他网站

public ActionResult Index()
{  
   return Redirect("http://www.yahoo.com.tw/");   
}

导入其他控制器+动作

public ActionResult Index()
{  
    return RedirectToAction("Index", "Home");
}

回传文字

public ContentResult Index()
{
   return Content("aa"); 
}

以下整理到下方


继承类别 Controller
ContentResult Content() 回传文字
ViewResult View() 回传HTML
FileResult File() 输出档案
HttpNotFoundResult HttpNotFound() 回应HTTP状态码(404)
JsonResult Json() 输出Json
PartialViewResult PartialView() 部分HTML
RedirectResult Redirect();RedirectPermanent() 重新导向URL
RedirectToRouteResult RedirectToAction()转网址址 or 转Action


後续说明会以ActionResult为主....

补充说明:如果是.Net6版本则是IActionResult 会多一个I 这表示.Net6版本框架采用C#介面写法
跟旧版本MVC5 没有落差太大

讲到这里会有人想知道如何将资料丢到View()上,以下提供几种作法

1.ViewBag 、ViewData、TempData

public ActionResult Index()
{
   ViewBag.Test = "test";
   ViewData["A"] = "A";
   TempData["B"] =  "B"; 
   return View();
}

ViewBag和ViewData只限於该Controller 离开该Controller 就读不到
TempData则是不同Controller 不同Action都有效
特点:读取一次後,Data里面"值"就会被清空


另外ViewBag和ViewData 如果取共用名称後者会覆盖前者

public ActionResult Index()
{
   ViewBag.Test = "A";
   ViewData["Test"] = "B";
   //ViewBag.Test、ViewData["Test"]值皆为B
   return View();
}
  1. 建立Class 将资料丢过去
public class Class1
{
   public string test { get; set; }
}

public ActionResult Index()
{
   var test = new Models.Class1 { test = "aa" };//var 资料型态为Models.Class1
   return View(test);
}
  1. Class 搭配 List 将资料丢过去
public ActionResult Index()

   List<Models.Class1> testList = new List<Models.Class1>
   {
      new Models.Class1 { test = "aa" },
      new Models.Class1 {test = "bb" },
      new Models.Class1 { test = "cc" },
      new Models.Class1 { test = "dd" }
   };

   return View(testList);//请注意 List 的资料型态为IEnumerable
}

後续会讲到丢过去View之後结果呈现会怎样....


<<:  [Day07] TS:什麽是 Utility Types?

>>:  Day13语法样式(CSS)

Alpine Linux Porting (2.1) clock is _not_ ticking

这篇开始基本上是进入持续分析有哪些未完善的部份需要进行补足。 依照这几次的bootlog的部份分析,...

[DAY-29] 你是谁,比你做什麽更重要

好拉~ 倒数第二天,我就来全部统整复习一下吧! 世界会改变 生命的重要本质 人生大哉问 信仰与理性...

创建App-(老师版)功能

创建App-(老师版)功能 今天来建设老师版的功能,授课时间与教课纪录。今天来弄弄成授课时间的页面,...

Hello, OS!

资料传输 常见的资料传输方式有两种: Serial 将一串资料拆成多个资料,一次传一个资料。 pro...

Day 14 - 寻访其他组件

在开发Vue时,官方建议使用属性及事件对其他元件做处理,不过凡事总有例外的嘛~ 还是会有一些情境中会...