1. 程式人生 > 其它 >4.ASP.NET MVC 5.0 檢視之模型繫結

4.ASP.NET MVC 5.0 檢視之模型繫結

https://www.cnblogs.com/caofangsheng/p/10461192.html

大家好,這篇文章,我將向大家介紹ASP.NET MVC的模型檢視繫結,ASP.MVC的模型繫結分為兩種:一種是動態繫結【Dynamic Binding】;還有一種就是強型別繫結【Strongly typed binding】;【PS--上一篇文章:3.怎樣將ASP.NET MVC應用程式釋出到IIS

當我們從控制器向檢視傳遞資料的時候,我們會返回一個ViewResult型別的物件,與此同時,我們在檢視中可以使用Model物件獲取控制器傳遞過來的資料。Model是WebViewPage泛型類的一個只讀屬性。

動態繫結和強型別繫結,有一些不同的地方需要知道。當我們使用動態繫結的時候,不能智慧提示出來:Model物件的屬性,方法等資訊,只能手動寫。使用強型別繫結就可以有智慧提示。

1.我們先看看動態繫結。

建立一個MVC專案:MVCModelBanding

新建一個Home控制器。新建一個Employee類,新建一個Index檢視;

Employee類程式碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace MVCModelBanding.Models
{
    public class Employee
    {
        /// <summary>
        /// 員工ID
        /// </summary>
        public int ID { get; set; }

        /// <summary>
        /// 員工姓名
        /// </summary>
        public string Name { get; set; }

        /// <summary>
        /// 性別
        /// </summary>
        public Gender Gender { get; set; }
    }

    /// <summary>
    /// 性別列舉
    /// </summary>
   public enum Gender
    {
        Men,
        Woman
    }
}

Home控制器程式碼:

using MVCModelBanding.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MVCModelBanding.Controllers
{
    public class HomeController : Controller
    {
        // GET: Home
        public ActionResult Index()
        {
            Employee emp = new Employee()
            {
                ID=1,
                Name="曹操",
                Gender=Gender.Men
            };
            return View(emp);
        }
    }
}

Index檢視程式碼:

@{
    ViewBag.Title = "Index";
}

<h2>Employee Records</h2>
<ul>
    <li>@Model.ID</li>
    <li>@Model.Name</li>
    <li>@Model.Gender</li>
</ul>

可以看到這時候,Model是動態的;

執行程式,看看效果:

好了,這就是模型檢視的:動態繫結,是不是很簡單?

現在我們來看看,怎麼使用強型別繫結吧。還是在Index檢視中,加入下面的程式碼:

@model MVCModelBanding.Models.Employee

執行程式:效果還是一樣。

下面,我們來討論一下使用強型別繫結的優點。

我們在Home控制器中加入一個Create方法,來看看不使用強型別和使用強型別,有啥區別。

建立Create檢視。

在Create檢視中建立一個表單。

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>
@using (Html.BeginForm())
{
<table>
    <tr>
        <th>ID:</th>
        <td>@Html.TextBox("ID")</td>
    </tr>
    <tr>
        <th>Name:</th>
        <td>@Html.TextBox("Name")</td>
    </tr>
    <tr>
        <th>Gender:</th>
        <td>@Html.TextBox("Gender")</td>
    </tr>
    <tr>
        <td></td>
        <td><input type="submit" value="提交"/></td>
    </tr>
</table>
}

在控制器獲取表單資料:執行專案:

輸入之後,提交:

可以看到,沒有使用強型別的時候,我只能通過FormCollection物件,來獲取表單資料。

使用強型別之後,我們就可以這樣:

執行專案,輸入值,點選提交:

可以看到,使用強型別,我們可以很方便的點出來Model的屬性方法,也不用Formcollection獲取表單值了,但注意,這裡還是可以通過Formcollection取值。看下面:

大家是否有疑問,什麼時候使用動態繫結,什麼時候使用強型別繫結?很好,這個想法很好,當我們向檢視傳遞任何型別的model物件的時候【不依賴於任何條件】,這時我們只能使用動態繫結,如果model的型別是確定的,我們最好使用強型別繫結。

好了上面就是,模型檢視的動態繫結和強型別繫結,大家學會了麼?