MVC model簡介
MVC 中的M就是指Model,資料模型
可視為是個包裏,把所有資料包起來
更簡單就是視作C# 中的class
先加入一個控制器叫ModelsDemo
並加入檢視,這個檢視只是用來放入幾個控制項傳值
這個Index的程式碼如下:
功能簡單,就是把值丟到page1而已
接著建立一個model,叫LoginInfo,程式碼如下:
也很簡單,就是取值跟丟值,不過要注意的是他的方法名稱
跟上面Index 中2個控制項都要一樣,不然沒辦法抓對
做完後就是回到ModelsDemo控制項,新增一個方法叫page1
準備接收值:
由以上可以看出這個方法帶了LoginInfo參數
可以直接丟進程式中帶入,為了避免有空值設定一個if
然後就可以做page1的檢視了
如此就可以利用Models的特性,把值「包裏」後丟到目的地
------------------------------------------------------------------------------------------------------------
models只有這樣就太弱了
稍稍修改一下Index的內容,將目標指向page2
<form action="ModelsDemo/page1" method="post">
然後ModelsDemo控制項,新增一個方法叫page2
程式碼:
而這是page2的網頁,弱形別:
可以改成強形別,最上句的dynamic改成MyMvcWeb.Models.LoginInfo:
最後,是ModelsDemo控制項page2方法中的註解
從原本傳統asp轉成Rozor的對應網頁
要注意第一句的model是小寫開頭!!
可視為是個包裏,把所有資料包起來
更簡單就是視作C# 中的class
先加入一個控制器叫ModelsDemo
並加入檢視,這個檢視只是用來放入幾個控制項傳值
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> </head> <body> <div> <form action="ModelsDemo/page1" method="post"> <p>帳號:<input type="text" name="LoginName" placeholder="帳號" /></p> <p>密碼:<input type="password" name="Password" placeholder="密碼" /></p> <p><input type="submit" value="送出"></p> </form> </div> </body> </html>
功能簡單,就是把值丟到page1而已
接著建立一個model,叫LoginInfo,程式碼如下:
namespace MyMvcWeb.Models { public class LoginInfo { public string LoginName { get; set; } public string Password { get; set; } } }
也很簡單,就是取值跟丟值,不過要注意的是他的方法名稱
跟上面Index 中2個控制項都要一樣,不然沒辦法抓對
做完後就是回到ModelsDemo控制項,新增一個方法叫page1
準備接收值:
public ActionResult page1(Models.LoginInfo li) { if (li != null) { ViewData["LoginName"] = li.LoginName; ViewData["Password"] = li.Password; } return View(); }
由以上可以看出這個方法帶了LoginInfo參數
可以直接丟進程式中帶入,為了避免有空值設定一個if
然後就可以做page1的檢視了
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>page1</title> </head> <body> <div> <h2>這是page1頁喔!</h2> <p>帳號:@ViewData["LoginName"] </p> <p>密碼:@ViewData["Password"] </p> </div> </body> </html>
如此就可以利用Models的特性,把值「包裏」後丟到目的地
------------------------------------------------------------------------------------------------------------
models只有這樣就太弱了
稍稍修改一下Index的內容,將目標指向page2
<form action="ModelsDemo/page1" method="post">
然後ModelsDemo控制項,新增一個方法叫page2
程式碼:
public ActionResult page2(Models.LoginInfo li) { return View(li); //傳統asp //return View("pp",li); //Razor,導向pp檢視,並直接帶入 }
而這是page2的網頁,弱形別:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<dynamic>" %> <!DOCTYPE html> <html> <head runat="server"> <meta name="viewport" content="width=device-width" /> <title>page2</title> </head> <body> <% var li = (MyMvcWeb.Models.LoginInfo)Model; %> <div> <h2>這是page2頁喔!</h2> <p>帳號:<%=li.LoginName %></p> <p>密碼:<%=li.Password %></p> </div> </body> </html>
可以改成強形別,最上句的dynamic改成MyMvcWeb.Models.LoginInfo:
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<MyMvcWeb.Models.LoginInfo>" %> <!DOCTYPE html> <html> <head runat="server"> <meta name="viewport" content="width=device-width" /> <title>page2</title> </head> <body> <div> <h2>這是page2頁喔!</h2> <p>帳號:<%=Model.LoginName %></p> <p>密碼:<%=Model.Password %></p> </div> </body> </html>
最後,是ModelsDemo控制項page2方法中的註解
從原本傳統asp轉成Rozor的對應網頁
要注意第一句的model是小寫開頭!!
@model MyMvcWeb.Models.LoginInfo <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>pp</title> </head> <body> <div> <h2>這是pp頁喔!</h2> <p>帳號:@Model.LoginName</p> <p>密碼:@Model.Password</p> </div> </body> </html>
留言
張貼留言