欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

4.ASP.NET MVC 5.0 视图之模型绑定

程序员文章站 2022-06-19 21:54:51
大家好,这篇文章,我将向大家介绍ASP.NET MVC的模型视图绑定,ASP.MVC的模型绑定分为两种:一种是动态绑定【Dynamic Binding】;还有一种就是强类型绑定【Strongly typed binding】;【PS--上一篇文章:3.怎样将ASP.NET MVC应用程序发布到IIS ......

        大家好,这篇文章,我将向大家介绍asp.net mvc的模型视图绑定,asp.mvc的模型绑定分为两种:一种是动态绑定【dynamic binding】;还有一种就是强类型绑定【strongly typed binding】;【ps--上一篇文章:3.怎样将asp.net mvc应用程序发布到iis

4.ASP.NET MVC 5.0 视图之模型绑定

当我们从控制器向视图传递数据的时候,我们会返回一个viewresult类型的对象,与此同时,我们在视图中可以使用model对象获取控制器传递过来的数据。model是webviewpage泛型类的一个只读属性。

4.ASP.NET MVC 5.0 视图之模型绑定

动态绑定和强类型绑定,有一些不同的地方需要知道。当我们使用动态绑定的时候,不能智能提示出来:model对象的属性,方法等信息,只能手动写。使用强类型绑定就可以有智能提示。

1.我们先看看动态绑定。

创建一个mvc项目:mvcmodelbanding

4.ASP.NET MVC 5.0 视图之模型绑定

新建一个home控制器。新建一个employee类,新建一个index视图;

4.ASP.NET MVC 5.0 视图之模型绑定

 

 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是动态的;

4.ASP.NET MVC 5.0 视图之模型绑定

运行程序,看看效果:

4.ASP.NET MVC 5.0 视图之模型绑定

 

好了,这就是模型视图的:动态绑定,是不是很简单?

现在我们来看看,怎么使用强类型绑定吧。还是在index视图中,加入下面的代码:

@model mvcmodelbanding.models.employee

4.ASP.NET MVC 5.0 视图之模型绑定

运行程序:效果还是一样。

下面,我们来讨论一下使用强类型绑定的优点。

我们在home控制器中加入一个create方法,来看看不使用强类型和使用强类型,有啥区别。

创建create视图。

4.ASP.NET MVC 5.0 视图之模型绑定

 

 

 4.ASP.NET MVC 5.0 视图之模型绑定

在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>
}

在控制器获取表单数据:运行项目:

4.ASP.NET MVC 5.0 视图之模型绑定

输入之后,提交:

4.ASP.NET MVC 5.0 视图之模型绑定

 

 

4.ASP.NET MVC 5.0 视图之模型绑定

可以看到,没有使用强类型的时候,我只能通过formcollection对象,来获取表单数据。

使用强类型之后,我们就可以这样:

4.ASP.NET MVC 5.0 视图之模型绑定

 

4.ASP.NET MVC 5.0 视图之模型绑定

 

运行项目,输入值,点击提交:

4.ASP.NET MVC 5.0 视图之模型绑定

 

 4.ASP.NET MVC 5.0 视图之模型绑定

 

 可以看到,使用强类型,我们可以很方便的点出来model的属性方法,也不用formcollection获取表单值了,但注意,这里还是可以通过formcollection取值。看下面:

4.ASP.NET MVC 5.0 视图之模型绑定

大家是否有疑问,什么时候使用动态绑定,什么时候使用强类型绑定?很好,这个想法很好,当我们向视图传递任何类型的model对象的时候【不依赖于任何条件】,这时我们只能使用动态绑定,如果model的类型是确定的,我们最好使用强类型绑定。

好了上面就是,模型视图的动态绑定和强类型绑定,大家学会了么?