MVC model簡介

MVC 中的M就是指Model,資料模型
可視為是個包裏,把所有資料包起來
更簡單就是視作C# 中的class


先加入一個控制器叫ModelsDemo
並加入檢視,這個檢視只是用來放入幾個控制項傳值


這個Index的程式碼如下:

<!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>

留言

熱門文章