1.创建新项目->选择ASP.NET Core Web应用程序->选择Web应用程序(模型视图控制器)
2.wwwroot放静态资源:css,font,images,js,map4,html...
MVC:Models项目没用上,以后再补充。Controllers控制器xxController.cs,Views视图子文件夹->xx.cshtml
3.项目逻辑总控制:Program.cs->调用UseStartup
跳转给Startup.cs->Configuration中有:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
} //第三个 URL 段与路由参数 id 相匹配 id? 表示数量可变
默认首页:协议+路径/Home/index/
4.视图总控制:Views->_ViewStart.cshtml
@{
Layout = "_Layout";
}
Views->Shared->_Layout.cshtml公共被调用模板
<title>@ViewData["Title"] - Practice</title>
自定义标题:调用页使用@{ViewData["Title"]="xxx";}
<div class="container">
<partial name="_CookieConsentPartial" />
<main role="main" class="pb-3">
@RenderBody()
<!--布局被引用标签,调用页只需在此处写入主体内容-->
</main>
</div>
...
@RenderSection("Scripts", required: false)
<!--在视图中有定义Scripts节点,它就会显示,反之不显示。
-->
例如:
@RenderSection("myName", required: true) 只要引用这个Layout page的视图,均要定义:
@section myName{ @*节点代码*@}
5.传参:
前端传值:
后端传值:ViewData、ViewBag、TampData的区别:
类型:ViewData为object型,需要根据输出类型我们自己去转换;ViewBag为dynamic型,可自动根据数据类型转换。
结构:ViewData为典型的字典型(Dictionary)即键值对结构,ViewBag则为动态型,子程序运行的时候进行动态的解析。
执行速度:ViewData比ViewBag的速度快,因为ViewBag源于ViewData,只是内部比ViewData多了一层Dynamic控制。
值的处理:ViewData和ViewBag值只对当前的View有用,TempData可在不同的action之间传递。
生命周期:ViewData和ViewBag的生命周期取决于View,TempData的值在使用了一次后会自动删除
控制器中写:ViewData["XX"]="xx";视图中调用:@ViewData["XX"]
6.接口
IActionResult接口
ActionResult 是IActionResult接口的实现(implement) 是一个抽象类
ViewResult, PartialViewResult, JsonResult 是抽象类ActionResult的实现(implement)
不确定类型时可使用:ActionResult