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

闲话不多说,我们言归正传。昨天讲到了如何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

.net MVC成长记录(二)的更多相关文章

  1. .net MVC成长记录(一)

    今天第一次写博客,之前从学校出来,学了ASP.NET, 现在第一份工作接触的是MVC,在此便记录和分享一下学习MVC的过程,希望能和大家多一些交流.言归正传,首先给大家介绍一下MVC的基础知识. MV ...

  2. .net MVC成长记录(四)Linq(1)

    今天不忙,没什么事情,继续写写随笔. 之前的文章写到了EF,很多人留言EF的操作用什么?  今天,就继续给大家分享EF的操作, Linq . 先从Linq操作Object内置对象开始 从Linq的基础 ...

  3. 蓝色的成长记录——追逐DBA(8):为了夺回SP报告,回顾oracle的STATSPACK实验

    ***********************************************声明*************************************************** ...

  4. ASP.NET MVC 描述类型(二)

    ASP.NET MVC 描述类型(二) 前言 上个篇幅中说到ControllerDescriptor类型的由来过程,对于ControllerDescriptor类型来言ActionDescriptor ...

  5. ASP.NET MVC Model验证(二)

    ASP.NET MVC Model验证(二) 前言 上篇内容演示了一个简单的Model验证示例,然后在文中提及到Model验证在MVC框架中默认所处的位置在哪?本篇就是来解决这个问题的,并且会描述一下 ...

  6. ASP.NET MVC Model绑定(二)

    ASP.NET MVC Model绑定(二) 前言 上篇对于Model绑定的简单演示想必大家对Model绑定的使用方式有一点的了解,那大家有没有想过Model绑定器是在什么时候执行的?又或是执行的过程 ...

  7. ASP.NET MVC Model元数据(二)

    ASP.NET MVC Model元数据(二) 前言 在上篇中,给大家留个对Model元数据的印象,并没有对Model元数据有过多的讲解,而在本篇中也不会对Model元数据的本身来解释,而是针对于它的 ...

  8. MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)

    前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...

  9. ASP.NET MVC 控制器激活(二)

    ASP.NET MVC 控制器激活(二) 前言 在之前的篇幅中,用文字和图像来表示了控制器的激活过程,描述的角度都是从框架默认实现的角度去进行描述的,这样也使得大家都可以清楚的知道激活的过程以及其中涉 ...

随机推荐

  1. eclipse常用设置之自动格式化

    Eclipse 保存文件时自动格式化代码   很多同学不知道Eclipse有个很有用的功能,就是自动格式源代码的功能,一般大家都是直接Ctrl+Shift+F手动格式化,多浪费时间. 其实Eclips ...

  2. maven常用dos命令

    在平常的开发中可能会经常切换开发中的一些工具,有时就会对一些常用的命令给忘记了 这里特别记录下来方便以后使用: 1.查看maven版本:mvn -c 2.一件构建启动Tomcat:mvn tomcat ...

  3. 解决windows64位系统上安装mysql-python报错

    解决windows64位系统上安装mysql-python报错 2018年03月12日 13:08:24 一个CD包 阅读数:1231    版权声明:本文为博主原创文章,未经博主允许不得转载. ht ...

  4. 解决Webpack中提示syntax 'classProperties' isn't currently enabled的错误

    当我们使用了一些JavaScript的一些新特性的时候,但是有没有在webpack.config.js里面或者是.babelrc文件中配置相关插件,就可以解决了. error:Support for ...

  5. $(document).ready(function(){}) 与 window.onload = function(){} 区别

    $(document).ready(fucntion(){ //在页面dom结构加载完毕后执行代码, }) window.onload = function(){ //页面所有内容加载完毕后,执行代码 ...

  6. (C/C++学习)5.C++中的虚继承-虚函数-多态解析

    说明:在C++学习的过程中,虚继承-虚函数经常是初学者容易产生误解的两个概念,它们与C++中多态形成的关系,也是很多初学者经常产生困惑的地方,这篇文章将依次分别对三者进行解析,并讲述其之间的联系与不同 ...

  7. TCP/IP UDP 协议首部及数据进入协议栈封装的过程

    数据的封装 UDP 封装 TCP 封装 IP 封装 检验和算法 当应用程序用TCP传送数据时,数据被传送入协议栈中,然后逐一通过每一层直到被当作一串比特流送入网络 注: UDP数据TCP数据基本一致. ...

  8. Windows读取NXP MiFare Ultralight C类型NFC卡片的信息

    1,读取 我们需要外接一个NFC Reader让Windows可以读取NFC卡片的内容. 因为特殊原因,我们选择了Sony rc-s380 NFC Reader.相关介绍 我们需要下载并安装NFC P ...

  9. [COGS 2264]魔法传输

    [COGS 2264]魔法传输 题目 自从看了<哈利波特>,小Y就十分渴望获得魔法值.于是他和一群向往魔法的孩子(当然这些孩子们都是不会魔法的)来到了哈利波特的家,大家坐成一排.哈利波特会 ...

  10. noip模拟赛 楼

    分析:题目可以转化为对于一个数,对它进行x次减法操作,n-x次加法操作,使他变成最小的非负整数.因为每减一次数就会减小,次数是一定的,所以可以二分x,就可以了. #include <cstdio ...