zoukankan      html  css  js  c++  java
  • asp.net core mvc简介

    MVC

    通常而言,我们使用.NET Core MVC 构建网页应用与 API,MVC是使用模型-视图-控制器(Model-View-Controller)设计模式。

    创建项目

    使用如下命令创建一个名称为demo的mvc应用程序,并还原相关依赖文件。

        dotnet new mvc -n demo
        dotnet restore
    

    创建的应用程序包含如下主要的文件:

       Controllers:控制器文件夹
       Views:视图文件夹
       wwwroot:静态文件文件夹,包括css,js,img等
       Program.cs:应用程序入口文件,包括Main函数,用来配置以及执行应用程序
       Startup.cs:启动文件,用来存放应用程序启动以及配置代码
       demo.csproj:应用程序配置文件
       其他文件:主要是配置前端压缩及获取类库的文件
    

    Startup

    ASP.NET Core 应用程序需要一个Startup类作为启动程序,在Startup类的构造函数中,可以使用一些依赖注入中的服务,例如可以使用IHostingEnvironment来设置配置数据源,ILoggerFactory类设置日志记录的服务提供商。
    Startup类中必须包含Configure方法以及一个可选的ConfigureServices方法,这些方法都会在程序启动时执行,其中ConfigureServices会在Configure方法之前执行。常见的Startup文件内容如下:

        public class Startup
        {
            public Startup(IHostingEnvironment env)
            {
                var builder = new ConfigurationBuilder()
                    .SetBasePath(env.ContentRootPath)
                    .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                    .AddEnvironmentVariables();
                Configuration = builder.Build();
            }
    
            public IConfigurationRoot Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                // Add framework services.
                services.AddMvc();
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                loggerFactory.AddConsole(Configuration.GetSection("Logging"));
                loggerFactory.AddDebug();
    
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                    app.UseBrowserLink();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                }
    
                app.UseStaticFiles();
    
                app.UseMvc(routes =>
                {
                    routes.MapRoute(
                        name: "default",
                        template: "{controller=Home}/{action=Index}/{id?}");
                });
            }
        }
    

    Model

    MVC 应用中的Model包含了视图所使用的数据信息,控制器将创建模型并发送到视图中,视图利用模型数据进行展示。常用的视图使用特别设计的视图模型(ViewModel)类型来进行数据展示。例如,一个简单的模型示例

        public class HeroVM
        {
            public int ID { get; set; }
            public string Name { get; set; }
            public string Type { get; set; }
        }
    

    Controller

    控制器是承载用户交互、模型运转、并最终选择视图进行渲染的组件。控制器处理并对用户输入和交互做出响应。在 MVC 模式,控制器是最初的入口,负责选择同哪一个模型类型协作和选择哪一个视图用来呈现。
    控制器中的代码应该尽量保持简单与整洁,复杂的业务逻辑应该抽象到其他的代码层次结构中进行处理。

    using Microsoft.AspNetCore.Mvc;
    using Demo.Models;
    
    namespace Demo.Controllers
    {
        public class HomeController : Controller
        {
            public IActionResult Index()
            {
                List<HeroVM> items = new List<HeroVM>();
                HeroVM item = new HeroVM()
                {
                   ID = 1,
                   Name = "demo1",
                   Type = "animal"
                };
                items.Add(item);
    
                return View(items);
            }
        }
    }
    

    View

    View负责在用户界面呈现内容。Asp.net Core使用 Razor 视图引擎在 HTML 标记中嵌入 .NET 代码。视图中应仅包含少量的逻辑,而这些逻辑应该是与呈现内容相关的。针对比较复杂的视图模型,可以考虑视图嵌套以及视图组件。
    以后使用单页面程序来进行开发,因此视图只进行简单的说明。

        @model IEnumerable<Demo.Models.HeroVM>
    
        <h3>some demos</h3>
        <ul>
            @foreach (var p in Model)
            {
                <li>@($"{p.Name} {p.Type}")</li>
            }
        </ul>
    
  • 相关阅读:
    Python正则表达式指南(转)
    二进制文件与文本文件的区分(转)
    Linux上的下载软件uGet
    Ubuntu 12.04安装Google Chrome(转)
    单元测试中的黑盒测试的重要性(转)
    尾递归(转)
    chrome使用技巧(转)
    LRU算法的Python实现
    MySQL单列索引和组合索引的区别介绍(转)
    Python性能优化(转)
  • 原文地址:https://www.cnblogs.com/SLchuck/p/7044647.html
Copyright © 2011-2022 走看看