控制器(Controller)主要是定義方法和加載視圖(View)
1.控制器中的Action方法返回值的類型ActionResult,string
2.控制器中Action方法接收瀏覽器參數方式:
2.1.通過 URL路由中配置的同名參數 --url: "{controller}/{action}/{id}",//Stu/Del/1
public ActionResult Del01(int id)
2.2.通過 Request.Form/Request.QueryString
[HttpPost] public ActionResult Modify() { //model.Id //model.Name Request.Form["Name"] return Redirect("/stu/index"); }
[HttpGet] public ActionResult Modify() { //model.Id //model.Name Request.QueryString["Name"] return Redirect("/stu/index"); }
2.3.通過 FormCollection
public ActionResult Modify2(FormCollection from) { //from["Name"] return null; }
2.4.通過 模型綁定 --View中所有空間的名稱必須和模型中屬性名一致,一般是post過來的才能接收
[HttpPost] /// <summary> /// 3.2修改 - 執行修改 /// </summary> /// <param name="model"></param> /// <returns></returns> public ActionResult Modify(Models.Student model)//模型綁定:.NetMVC框架會在調用action方法前,創建 參數model對象,並從請求報文中檢查看是否有與該對象屬性同名的 數據,如果有,則 設置給 該對象同名的屬性 { DbEntityEntry entry = db.Entry<Models.Student>(model); entry.State = System.Data.EntityState.Unchanged; entry.Property("Name").IsModified = true; entry.Property("CId").IsModified = true; db.SaveChanges(); return Redirect("/stu/index"); }
視圖加載方式:
//--------------------------------------2.0 加載指定視圖----------------------------------- public ViewResult LoadViewBySelf() { return View(); //1.0 通過指定 視圖名 加載 指定的視圖:此視圖 必須在 當前控制器同名 的文件夾中 //return View("LoadTarget"); //2.0 通過指定 視圖路徑 加載指定的視圖:基於根目錄 return View("~/Views/Home/List.cshtml"); }
控制器向View傳遞數據
1.控制器類對象創建視圖類對象,並把控制器類中的屬性ViewBag、ViewData、TempData、Model值賦值給視圖類對象的屬性ViewBag、ViewData、TempData、Model
1.1.用戶訪問一個MVC應用程序 例如地址 Home/Index
1.2.服務器通過路由表解析URL,實例化對應的控制器類並調用Action方法(Index),返回ActionResult對象。
1.3.ActionResult對象的ExcuteResult方法就會創建對應的視圖類對象(Index_cshtml),通過控制器對象中的ViewBag、ViewData、TempData、Model屬性值賦值給View對象中對應的ViewBag、ViewData、TempData、Model。
1.4.調用View對象中Excute方法生成HTML
具體事例:
用戶請求 Home/Index 控制器類 home=new 控制器(); ActionResult ar=home.Index(); ar.ExcuteResult();--創建對應的視圖對象 Index_cshtml view=new Index_cshtml(); view.ViewBag = home.ViewBag; view.ViewData = home.ViewData; ..... view.Excute();
2.ViewBag、ViewData在視圖類對象中互相共享的
3.Model是ViewData的Model屬性
public ViewResult TransData() { ////動態數據類型,類似與JS里的對象。 ////但是因為 此種對象是在運行時才知道對象的類型,所以編譯器和VS都無法推斷並產生 智能提示 //dynamic obj = new object(); //dynamic Cla = new ClaController(); //dynamic num = 1; ////動態數據類型 可以動態 添加屬性 //obj.AA = 123; //int a = obj.AA; //3.1 ViewBag ViewBag.GzItcast = "廣州傳智播客~~~!"; //3.2 ViewData ViewData["HnItcast"] = "湖南傳智播客~~~!"; //3.3 TempData TempData["USAItcast"] = "美國傳智播客~~~!"; //3.4 Model Models.Class modelClass = new Models.Class() { CName="德國傳智播客~~!" }; ViewData.Model = modelClass;//return View(modelClass)就是把modelClass賦值給控制器對象ViewData屬性的Model屬性 return View(); }
Views
<html> <head> <meta name="viewport" content="width=device-width" /> <title>TransData</title> </head> <body> <div> @ViewBag.GzItcast <br /> @ViewData["HnItcast"] <br /> @ViewBag.HnItcast <br /> @ViewData["GzItcast"]<br /> @TempData["USAItcast"]<br /> @Model.CName<br /> @ViewData.Model.CName </div> </body> </html>