MVC學習二:Controller和View關系


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

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM