MVC_1

MVC简介,MVC创建,MVC添加数据(请求参数技巧,区别GET POST),数据传递到前端(ViewData)

MVC_1

MVC简介

ASP.NET web开发方式

  • WebForm开发
  • Asp.Net Mvc开发
  • MVC是09年微软对外公布的第一个开源的表示层框架,这是微软的第一个开源项目
  • MVC的目的不是取代WebFrom开发,只是web开发的另一种选择,但是为目前的主流开发方式
  • MVC请求模型图如下

227cJ1.png

227rhv.png

可以看出webFrom是强耦合的关系(aspx继承自sapx.cs),而MVC模式职责明确

如何创建?

新建项目-web-web应用程序-MVC

观察新建好的工程文件,会发现微软自动帮我们引用了很多有用的dll,比如EF或者jq等等,Scripts文件夹下

由我们需要的js,$文件夹\color{HotPink}{Controllers文件夹}$是我们需要关注的,右键-添加控制器(通常我们选择空),$记住后缀千万别改\color{HotPink}{记住Controller后缀千万别改}$,例如HomeController.cs,然后我们观察这个类,发现有一个Index方法,里面有一句return View();,这个是找视图的,右键这个方法名字Index(),添加视图,然后我们发现再View文件夹下多了一个Home文件夹,这个文件夹跟我们的Controller名字一样,这就是微软提出的约定大于配置。方法的名称与试图名称一致,视图放在Views文件夹下的当前方法所在控制器名称一致的文件夹下。

直接运行起来我们发现是index页面,因为在Global.asax的类里面,有一个Application_Start()方法,这是程序启动时候会执行的方法,里面的这一句RouteConfig.RegisterRoutes(RouteTable.Routes);,其中的RegisterRoutes方法是配置我们的路由的,观察我们的路由规则,以及defaults,就不难理解跳转了

1
2
3
4
5
6
7
8
9
10
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}

MVC添加数据

我们以请求Home/AddUserInfo为例,即HomeController下的AddUserInfo方法接收数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public ActionResult AddUserInfo(UserInfo userinfo)
{
EfFirstModleEntities db = new EfFirstModleEntities();//EF的控制类
userinfo.RegTime = DateTime.Now;
db.UserInfo.Add(userinfo);
if (db.SaveChanges()>0)//受影响行数>0
{
return RedirectToAction("Index");//地址重新转向
}
else
{
return Content("添加失败");
}
}

上面我们可以看到在MVC里我们用RedirectToAction()这个方法重定向。Content()这个方法返回数据,必须是String类型,并且我们这里的参数是UserInfo,这里是一个MVC的技巧,就是如果From表单下的标签中的name的值是跟我们的Mdole类中的属性名字一样,那么我们参数中的Modle类对象就自动接收返回的数据,当然还有另外的方法就是参数的名字跟表单的name的值一样这样也可以,在MVC中,如果表单提交的是当前方法的话,那么在当前方法中如何砍断是post请求还是get请求,我们的做法是重载当前方法并且带参数,以及方法名前面带上post的标签,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[HttpPost]
public ActionResult Register(UserInfo userinfo)
{
EfFirstModleEntities db = new EfFirstModleEntities();
userinfo.RegTime = DateTime.Now;
db.UserInfo.Add(userinfo);
if (db.SaveChanges() > 0)
{
return Content("OK");
}
else
{
return Content("添加失败");
}
}

列表展示

可以把内容赋值给ViewData“”

1
2
3
4
5
6
7
public ActionResult Index()
{
EfFirstModleEntities db = new EfFirstModleEntities();
var userInfoList=db.UserInfo.Where(u => true);
ViewData["UserInfoList"] = userInfoList;
return View();
}
1
2
3
4
5
6
7
8
9
10
11
12
@foreach (var userInfo in (IQueryable<UserInfo>) ViewData["UserInfoList"])//强转对象
{
<tr>
<td>@userInfo.Id</td>
<td>@userInfo.UserName</td>
<td>@userInfo.UserPwd</td>
<td>@userInfo.RegTime</td>
<td><a href="/UserInfo/Edit">修改</a></td>
<td><a href="/UserInfo/Details">详细</a></td>
<td><a href="/UserInfo/Delete">删除</a></td>
</tr>
}

MVC_1
http://www.kju147.com/2018/04/15/MVC-1/
作者
个人学习
发布于
2018年4月15日
许可协议