备注:
过去MVC模式并不适合小型甚至中等规模的应用程序,这样会带来额外的工作量,增加应用的复杂性。但现在多数软件设计框架,能直接快速提供MVC骨架,供中小型应用程序开发,此问题不再存在。对于开发存在大量用户界面,并且逻辑复杂的大型应用程序,MVC将会使软件在健壮性、代码重用和结构方面上一个新的台阶。尽管在最初构建MVC模式框架时会花费一定的工作量,但从长远的角度来看,它会大大提高后期软件开发的效率。
笔记:
-》Razor的使用:C#代码与html混编
-》HtmlHelper:快速完成表单布局
-》行为向视图传递数据:ViewData["键"],可以简写为ViewBag.键
-》强类型页面
为什么要使用强类型页面:实现了编译时错误检查,防止对于对象的属性的编写错误
怎么用:@model 类型,写在页面的最上面
访问:ViewData.Model(可简写为Model),Html.***For(c=>c.***)
-》难点:扩展方法,lambda表达式
笔记:
-》行为的本质就是方法
-》返回类型:ActionResult
-》行为的重载必须同时符合两点:1.参数不同;2.请求方式不同 (为啥参数不能区分呢 因为参数可以自动装配 无法仅仅通过参数来区分)
-》数据的传递与接收:
传递:支持get、post方式传递
接收:Request["键"],自动装配(post的name和行为参名一样才能实现)
其他补充:
1.做列表页面:(这种方式自己试了好像不行)
controller里面行为返回ViewBag.Model = List<Person> list;
view页面强类型设置为@using model List<**.Person>
然后遍历
@foreach(var item in Model)
{
遍历输出...
item.xxx;
}
自己尝试这个写法可以:
控制器:
public ActionResult CoachList() { List<UserDTO> coachList = _userBLL.GetCoachList(); return View(coachList); }
页面:
头部:
@model List<XX.DTO.UserDTO>
内容:
@foreach (var item in Model) { <a>@item.NickName</a> }
其他方式:
控制器中:
public ActionResult CoachList() { List<UserDTO> coachList = _userBLL.GetCoachList(); CoachListViewModel viewModel = new CoachListViewModel(); //CoachListViewModel为自定义视图实体类型 viewModel.CoachList = coachList; return View(viewModel); }
自定义视图实体类型CoachListViewModel
namespace Web.Models.ViewModel { public class CoachListViewModel { public List<UserDTO> CoachList { get; set; } } }
页面中:
顶部:@model Web.Models.ViewModel.CoachListViewModel
内容:
@foreach (var item in Model.CoachList) { <a>@item.NickName</a> }
2.controller中行为的自定义类型参数自动装配:(view中页面强类型请求过来)
public ActionResult Add(Person person)
{
装配过程:
1.先创建并初始化一个Person对象
2.然后把post过来的值,通过name作为键去找值,如果有的话自动装配赋值给Person对象属性。
}
备注:
如果使用的是RouteDebugger,则不需要在Global中注册,而是通过web.config中为appsettings添加子节点<add key="RouteDebugger:Enabled" value="true"/>
备注:
#region 路由规则示例 //新闻显示页 routes.MapRoute( name: "NewsShow", url: "News/{year}-{month}-{day}-{id}", defaults: new { controller = "NewsHome", action = "Show" }, constraints: new { year = @"^\d{4}$", month = @"^\d{1,2}$", day = @"^\d{1,2}$" } ); //新闻列表页 routes.MapRoute( name: "NewsList", url: "News/{type}-{pageindex}-{pagesize}", defaults: new { controller = "NewsHome", action = "List" } ); //新闻首页 routes.MapRoute( name: "NewsIndex", url: "News/{*values}", defaults: new { controller = "NewsHome", action = "Index" } ); //网站首页 routes.MapRoute( name: "Index", url: "{*values}", defaults: new { controller = "Home", action = "Index" } ); #endregion