• ASP.NET MVC Model元数据(一)


    ASP.NET MVC Model元数据(一)

    前言

    在我初学的时候对Model元数据的概念很模糊,或者说是在大脑中没有它的一个模型,作为小白的我去看网上的一些文章还是两眼一黑啥都看不明白,然后我想退缩了,对的我退缩了准备跳过这个部分去学其他的,在这过程中干什么都没精神,就跟有一根刺插在心上一样,最终我还是回头了,现在来和大家分享一下什么是Model元数据,希望看完能对有的朋友有点帮助,大概的了解一下Model元数据到底是个什么玩意。

    Model元数据

    • 什么是Model元数据?
    • 生成Model元数据的过程【一】
    • 生成Model元数据的过程【二】
    • ModelMetaData的定义、详解
    • Model元数据应用(常用特性应用)-1
    • Model元数据应用(自定义视图模板)-2
    • Model元数据应用(IMetadataAware接口使用)-3

    什么是Model元数据?

    前面耽搁了这么久,不废话了我们直接切入主题。

    既然叫Model元数据就按照字面的意思得先要有Model吧(Model指的是视图模型)。那我们就先定义Model,请看代码1-1:

    代码1-1

        public class Customer
        {
            public string CustomerID { get; set; }
            public string Name { get; set; }
            public DateTime RegistrationDate{ get; set; }
            public Address Address { get; set; }
            
        }
        public class Address
        {
            public string Name { get; set; }
        }

    很简单的示例Model,定义了我们就要展现它。

    示例还是接着前面篇幅的示例,还是那句话没看过的朋友们也没事。在你自己项目中找到默认控制器所在,并且添加代码1-2到其中。

    代码1-2

    1         public ViewResult Show(Customer customer)
    2         {
    3             return View(customer);
    4         }

    然后我们右键Show()方法,添加视图,并且勾选创建强类型视图,如图1-1所示。

    图1-1

    (这里跟大家说一下,如果怕手敲代码的失误可以在下拉框中选择你要定义到视图的模型类型,可能刚刚在VS环境中添加的类型还没显示出来,这时候点击取消,重新生成以下项目,然后再按照上面的步骤就可以找到你刚刚定义的类型了)

    然后”添加”,添加代码1-3到视图中。

    代码1-3

    <p>@Html.EditorForModel()</p>

    这时候还不能调试,需要在我们在项目中新建个文件夹,命名为Binders,然后在此文件夹下新建类文件命名为MyCustomBinderModel.cs,打开修改成如代码1-4。

    代码1-4

    using System.Web.Mvc;
    using ConsoleApplication2;
    
    namespace MvcApplication.Binders
    {
        public class MyCustomBinderModel:IModelBinder
        {
            public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
            {
                return new Customer()
                {
                    CustomerID = "010",
                    Name = "测试人员",
                    RegistrationDate = DateTime.Now,
                    Address = new Address()
                    {
                        Name = "天空之城"
                    }
                };
            }
        }
    }

    (代码1-4中引用的命名空间ConsoleApplication2是Model所在部分,应该定义在项目的Models文件夹中的,这里大家要注意下不要学习我的这种做法。)

    代码1-4是我们自己定义的模型绑定器,配置我们的调试环境所需,定义好了过后,还需要把自定义的模型绑定器添加到系统中,需要在Global.asax文件中的MvcApplication类型下的Application_Start()方法中添加代码1-5。

    代码1-5

    ModelBinders.Binders.Add(typeof(Customer), new Binders.MyCustomBinderModel());

    这个时候我们来调试一下,结果如图1-2.

    图1-2

    看到这里了,有的朋友会问了说了这么多一点都没有讲到Model元数据啊?稍安勿躁,不要着急,看下图1-3.

    图1-3

    本来还想修改视图模型加上一些控制展示的特性,但是为了简洁明了给大家留个最基础的印象决定还是舍弃掉,当然了后面会有讲到的。

    现在我们倒着讲,在视图中有句 @Html.EditorForModel()代码,还有一系列的方法都是视图辅助器方法,为什么叫这个名字呢,因为它帮助我们生成视图中所需的HTML代码,那么我们想过没有这些个视图辅助器方法是根据帮助我们生成HTML代码的呢?对了,就是根据Model元数据,现在就可以把Model元数据对象想象成封装着Customer类型中的各种展示信息,细心的朋友可能发现图1-2中少了点什么,Customer的Address属性没有展示出来,为什么呢?这些问题和Model元数据的生成过程以及它的对象结构在后续的篇章中会讲解到。

    可能前篇铺垫了这么多后面就是一张图来说明什么是Model元数据有点坑,为了初学者没有考虑到大神们的感受,因为我知道我刚接触这部分知识的时候最想了解什么,所以望大神们勿喷。有了这个基础对后续文章的理解有很大的帮助,也会让大家在大脑中留个印象。

    作者:金源

    出处:http://www.cnblogs.com/jin-yuan/

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

  • 相关阅读:
    SA (后缀数组) 学习笔记
    loj2318 「NOIP2017」宝藏[状压DP]
    hdu4352 XHXJ's LIS[数位DP套状压DP+LIS$O(nlogn)$]
    【鸽】poj3311 Hie with the Pie[状压DP+Floyd]
    P1879 [USACO06NOV]玉米田Corn Fields[轮廓线DP]
    hdu4507 吉哥系列故事——恨7不成妻[数位DP]
    BZOJ3329 Xorequ[数位DP+递推矩阵快速幂]
    poj1015 Jury Compromise[背包]
    hdu3586 Information Disturbing[二分答案+树形DP]
    BZOJ4247 挂饰[背包]
  • 原文地址:https://www.cnblogs.com/jin-yuan/p/3798223.html
Copyright © 2020-2023  润新知