MVC的概念不多说,model + view + Controller 有人说这个和三层没有什么区别啊。也是分三层写的啊。MVC中model层我们真的没有做什么,基本就是建立数据模型,而controller层是逻辑判断和数据操作,而View则是简单的页面显示。这么一看,和简单三层没有区别。其实我们只要仔细的研究一下就会发现,MVC更想是对WEB层的一个再分,就是把WEB进行了一个三层分化。我不知道我这样说对不对,我是这么理解的。
好了,更多的概念不多说,下面介绍一下,MVC的简单的操作。
个人认为,MVC做一些网站或是新闻列表类的项目,速度非常快,如果你有一个非常好的美工同伴,你只要写好C层,省下的就都不用你管了。因为如果你的表结构不复杂,Entity已经把model层全给你写好了。你什么都不用做了。
先简单说一下 Global.asax文件中的 public static void RegisterRoutes(RouteCollection routes)的设置,其实他的设置很有意思,也很简单,说白了,就是你要在页面间传的值的格式和值的名字。
如下:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"TwoValue",
"{controller}/{action}/{schoolcode}/{selects}"
);
routes.MapRoute(
"ThreeValue",
"{controller}/{action}/{schoolcode}/{selects}/{id}"
);
routes.MapRoute(
"FourValue",
"{controller}/{action}/{UserName}/{UserPwd}/{UserType}/{schoolcode}"
);
routes.MapRoute(
"FiveValue",
"{controller}/{action}/{schoolcode}/{type}/{num}/{username}/{userphone}"
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Login", id = UrlParameter.Optional } // Parameter defaults
);
}
这里的写法与语法,不多说,网上很多。只说明一点,我这里设置了很多,有人会说,MVC怎么认啊。万一我传的是一个值,他按二个值给我传怎么办呢。MVC还是很聪明的,他会根据你这里面的方法的顺序和值的配对关系,以及值名进行查找最匹配的来进行传值,不过有一点,要说明的是,这里定义的值名,你在C中进行写的时候,一定要与这里的名一样,如
routes.MapRoute(
"TwoValue",
"{controller}/{action}/{schoolcode}/{selects}"
);
这是传二个值的简单方法。我们看一下,前二个值,是C层和C层中的action的名字,这二个可以根据你自己情况去写,可是后面的二个名字,schoolcode,selects就必须要和这个一样,
/// <summary>
/// 家长通讯录
/// </summary>
/// <param name="schoolcode">学校标识</param>
/// <param name="selects">老师teach_id</param>
/// <returns></returns>
public ActionResult ParentIndex(string schoolcode,string selects)
{
ViewData["schoolcode"] = schoolcode;
ViewData["teach_id"] = selects;
return View();
}
看到了吧,你可以试着,将schoolcode,selects改一下名,看会有什么效果。
下面我们来看一下C层的,C层的其实很简单,根据不同的要求去写不同的方法,一般都是ActionResult这样的,他的返回值,有很多种,如上面程序中的,return View();
基本上就是返回一个空了。还有一些如return VIew(aaa);,return content(""),等方法,这个在以后会看到。
这个不多说了,这里我要说一下,在生成V层时一些注意的地方,生成V层一般,是点C层的方法,我后可以自动生成相关的页面了。
View Name,就是你要生成的V层的文件名,这里我主要要说的,就是我展的这个下拉列表,这里是你所有model模型的表结构,在这里你可以为你这个V层的页面选择一下,它显示的数据是哪个表的,这里注意的事,这里的简单,是单表,如果是多表怎么办呢。只能自己去models里建立一个类文件,然后将数据存成它的格式就行了。就像三层里我们写的一样。
选择完,数据类之后,我们就要选择,V层页面显示的样子了,这里很重要也很有意思,这几个选项目,大家一目了然,建立,删除,浏览,编辑,空,列表。如果你做简单的页面,只要选择就行,他就会给你生成一个例子,很简单,不过列表没有分页。我这里要说的,因为生成的样子一般不会与我们要的样子一样,所以大家感觉没什么,其实不然,你选择之后,它会在V层的页面page部分,有所不同,这个不同就决定了,你页面显示的不同。
下面是三个图,大家看一下,第一个图,是不选数据类,第二个图,是选数据类,但是选择一个空,第三个是选数据类,而选择了列表,大家看一下,他们的区别
(图1)
(图2)
(图3)
大家看到区别了吧。这个在以后的具体程序中,我们也会说到,列表什么样,详细页面什么样,空什么样。这里主要要说明的是,就是让大家在生成V层的时候,选择一下自己要的类别,这样对程序开发有一个便捷性
这里要提醒大家一点的,就是我上面提到的,如果我要提的数据不是一个单表,而且是一个多表查询,查询想要得到的数据,还是从多表中取出的,这怎么办呢。我前面说到了,就是在model中生成一个文件,如下面的程序,就是我的写的一个,这里面的三个值,一个是学生标识种子,一个学生姓名,一个是家长电话,是从二个表中取的
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace En_MVC_test.Models
{
public class stu_kind
{
/// <summary>
/// 标识种子
/// </summary>
public int id { get; set; }
/// <summary>
/// 用户姓名
/// </summary>
public string studentName { get; set; }
/// <summary>
/// 用户电话
/// </summary>
public string stuKindPhone { get; set; }
}
}
这样就行了,这时候,你保存,到上面的data class里去找,你会发现没有,这个时候,你把这个项目重新编译一下就会出来了。
这一章就到这里,下一章,将简单介绍一下linq to Entity的语法。