• .net MVC成长记录(二)


    今天上班的任务完成了,接下来写一下博客,巩固一下,再学习一些新知识。

    闲话不多说,我们言归正传。昨天讲到了如何mvc框架在微软下,已经变成了一个非常灵活非常‘干净’的开发框架了, 同时也讲述了如何创建一个MVC的项目和属于自己的页面,今天

    继续探讨MVC的模型、控制器、视图和传统的html页面的异同。

    html , 如我们所熟知,是一种超文本的标记语言,读写简易,拓展性强;

    cshtml, 是在MVC3.0之后出现的新特性,基础的方法仍然是html的格式,同时也增加了一种新的方式(基于html的,浏览器解析后是一样的)

    举个例子:

         Html.BeginForm()

          该方法用于构建一个From表单的开始,他的构造方法为:

          Html.BeginForm("ActionName","ControllerName",FormMethod.method)

          一般构建一个表单结构如下

          他将在客户端产生一个类似<form action="/account/login" method="post"></form>标签

    同样的,还有很多 @Html.XXX 注意在页面上,@符号的使用,可以理解为一种声明MVC特性

    所以,我们总结一下: 不管是用html的标签,还是用@.html 标签, 都可以实现我们想要的功能, 但是MVC仅此而已吗?  当然不是了, 下面介绍下,MVC灵活和强大的地方

    首先是值的传递

     MVC传值交互这一块儿,大致分为一下几种

    1、ViewBag

    2、ViewData

    3、TempData

    4、使用普通方式传递 return View( 需要传递的 )

    5、使用强类型传递 return View(需要传递的 )

    为什么微软会推出这种传递方式呢? 

    我们先看一下用法。 

    首先是ViewBag , 使用的范围很广, 可以同一个View 视图中,声明传值

    @{

    ViewBag.msg = "我的第一个ViewBag"

    }

    <p>  @ViewBag.msg </p>

    这时候浏览器解析得到的<p>标签里就是 我的第一个ViewBag 这句话。

    如果是在控制器Controler中, 同样可以使用

    public AcitonResult myViewBag()

    {

    ViewBag.msg ="我的第一个ViewBag";

    return View();

    }

    View视图中直接接收 @ViewBag.msg 就可以得到同样的效果, 

    ViewData的传递方式与之类似, 不同的地方在于ViewData是指定类型的传递, 我们在使用的时候,需要强制类型转换一下

    以上两种传递, 多用于VIew-View C-View 之间的一种传递

    TempData 是一种C-C之间, 且用完即清除掉的一次性传递,防止数据丢失和数据安全的

    TempData[" "] = ""; 

    普通类型传递 

    声明一个变量

    var model = new { ... } 

    return(model) 

    页面也能通过Model接收的到  model

    下面重点说一下 这个强类型视图 

    这个强类型视图是什么意思呢? 顾名思义,是在C-V之间的模型关系,强制限定了某一个数据模型

    这样做的弊端看似局限了,实则不然, 这种限制,使得逻辑更明确,操作更简单, 数据更单一,

    强视图的声明很简单, 就是一句话

    在View页面最顶端写上

    @model 你的Model模型类

    写好这个类以后,直接就可以调用你在控制器里传递过来的对象,

    举个简单的列表显示的例子


    namespace demo
    {

    public class TbdemoList{

    public List<Tbdemo> demoList {get;set;}

    }

    public class Tbdemo
    {

    private int _ID;
    private int _Name;

    public int ID
    {
    get { return _ID; }
    set { _ID = value;}
    }

    public int Name
    {
    get { return _Name; }
    set { _Name= value;}
    }

    }

    }

    这样一个Model写好了, 取名叫demoModel , 数据库大家就自己建吧 , 不会的朋友可以参考一下其他博友的介绍, 也可以百度一下教程

    那么,在控制器里, 我们如何写?接下来,大家请看

    public ActionResult Demo()

    {

    List<TbDemo> model = new list<Tbdemo>();

    model[0] = TbDemo 的对象;

    model[1] =TbDemo 的对象;

    有数据库,可以直接获取到,然后逐行Datarow 方法遍历添加

    return View(model);

    }

    传递了这个对象数组进入了View视图

    使用的方法很简单

    @model demo.TbdemoList

    <div>

    @foreach(Tbdemo t in Model.demoList )

    {

    <p>t.ID </P>

    <p>t.Name </P>

    }

    </div>

    这个例子用到了面向对象的一种编程思想,大家可以多看几遍, 我在学习的过程中, 也是不断的思考,不断的总结 , 我们可以看到, 这种方式,更加灵活,逻辑上也很清晰,单一

    需要多少, 可以对象数组包含对象的方式, 以对象操作对象 。

    今天的午休时间结束了, 下次不忙的时候,继续和大家一起学习MVC。 

    有其他疑问,或是想互相交流的,可以联系我的QQ: 58608576 

  • 相关阅读:
    Introduce myself
    二叉搜索树的后序遍历序列(剑指offer-23)
    从上到下打印二叉树(剑指offer-22)
    二叉树的深度(剑指offer-38)
    不用加减乘除做加法(剑指offer-48)
    栈的压入、弹出序列(剑指offer-21)
    Java容器
    包含min函数的栈(剑指offer-20)
    在Docker中创建Mongodb数据库
    词向量聚类实验
  • 原文地址:https://www.cnblogs.com/29boke/p/5015935.html
Copyright © 2020-2023  润新知