控制器(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>
