一、新建空项目

  打开VS2017,新建→项目,选择如下:

点击,确定,弹出的界面选择如下:

选择空项目,因为选择其他的话会自动生成很多用不到的类,显得项目不够“清爽”,ASP.NET Core选择2.0版本。最后点击确定。创建项目如下:

刚建好的项目可能在依赖项哪儿有黄色的感叹号,那是因为NuGet包还没有加载完,等加载完以后黄色感叹号就消失了。看!整个项目很清爽吧!不管三七二十一,先Run起来。


标志性的语句出现了。这样就好了?来,我们慢慢的分析已这“Hello World!”的是怎么出现的,全文搜索一下。

尴尬,完全看不懂在干嘛,这要那样啊?能不能让我愉快的Hello World了?

二、新建Controllers,Views和Models文件夹

1.新建
  上面的没看懂?没关系,我们试着写一下自己的“Hello World”。

一口气创建了三个文件夹,名字“尽量不要写错了”,再个Controllers添加一个控制器,取名“HomeController”。趁着这个时间回忆一下老师说的Controller,Model和View之间的关系(直接上图):
简单流程:Http→(路由)→Controler(处理业务)→构建Model→Views→Response→浏览器

2.改造

2.1改造Startup,如下图:

2.2HomeController改造

2.3输出

哈哈哈,终于出来了自己手动写的"Hello world"。

3 Model和View

public IActionResult Index1()
{
return View();
}

然后在Index1选中,右击,选择添加视图,如下图:

去掉“使用布局页”的勾选,点击添加。完成后在Views文件夹下面添加了一个Home文件夹,里面有一个Index1.cshtml文件,这个就是Index1对应的视图文件。继续改造:

在models文件夹下面添加User类,如下:

public class User
{
public string Name { get; set; }
public int Age { get; set; }
public DateTime Birthday { get; set; }
}

在Controller的Index1下面添加如下代码:

public IActionResult Index1()
{
DateTime dt = DateTime.Now;
User user = new User() { Name="Andy",Age=18,Birthday=Convert.ToDateTime( $"{dt.Year-18}-{ dt.Month}-{dt.Day}")};
return View(user);
}

都懂得,18,那年我也18,她也18。。。

在Index1视图页面添加如下代码:

Razor?刮胡刀?不是,它意思是Razor引擎啊,不晓得的同学可以百度去看看,这里就不讲了。全部改完了,Run起来。

嗯嗯,没错,就是我,永远18岁的我,没毛病。加一点View和Model直接的传值(面试必考,敲黑板,重点,重点,重点。重要的事说三遍)

4 Controller和View之间传递值

4.1Controller传向View

(1)Model对象

像前面给View中传递一个对象的方式就是Model对象传值,对应的视图也是强类型视图,一个视图只能有一个强类型。

(2)ViewBag、ViewData和TempData

传值:

取值:

Run:

区别:本质是没有什么区别,都可以实现传值。ViewBag只是ViewData的封装版,他们之间是可以相互转换的,比如:ViewBag.Title,在页面中取值的时候可以用ViewData["Title"],同理,用ViewData["temp"]可以再用ViewBag.temp进行取值。这几种方式都比较适合传递少量的值,如果就一个两个之间,可以用上面的方式进行传递,如果值比较多的情况下还是推荐使用Model的方式进行传递值。

(3)ajxa传递

(4)第三方js组件

4.2 View到Controller

(1) QueryString

新建action:

public IActionResult Index2()
{
return View();
}
[HttpPost]//接受post方式的请求
public IActionResult Submit(string username,string password)
{
return Content($"username={username},password={password}");
}

新建视图页面Index2,Form表单提交数据,

<form action="/Home/Submit" method="post">
  <label>用户名:</label><input type="text" name="username" /><br />
  <label>密码:</label><input type="text" name="password" /><br />
  <input type="submit" value="登录" />
</form>

Run:

(2)FormCollection对象

public IActionResult Submit(FormCollection fc)
{
string username = fc["username"];
string password = fc["password"];
return Content($"username={username},password={password}");
}

需要引用Microsoft.AspNetCore.Http命名空间,FormCollection 以键值对的方式进行取值。

(3)Model方式取值

新建UserParamModel类,

public class UserParamModel
{
public string UserName { get; set; }

public string Password { get; set; }
}

三、参数合法性校验

   在项目中我们经常会遇到不合法的参数,通常我们也会对参数的合法性做校验,下面我们就看看如何通过c#的特性(Attribute)对参数的合法性进行校验。特性?干嘛的?特性是用于在运行时传递程序中各元素(比如:类,方法,结构等)的行为信息的申明性标签。标签?对就是标签,哪儿需要就贴在哪儿,就是药膏一样。还需要注意的是:它是在运行的时候才会起作用。编译的时候只要语法不错就是没有问题的。特性主要分为预定义特性和自定义特性。

3.1 预定义特性

预定义,顾名思义就是系统给我们已经准备好的特性,我们可以直接使用的。(未完,待续)

  总结,这篇是入门篇,主要是一步一步引导初学者新建一个ASP.NET CORE 2.0的web项目。有一些注意的点列举一下。

1、需要在Startup的ConfigureServices里面添加service的服务;

2、需要手动添加路由,app.UseMvcWithDefaultRoute();

3、Controller控制器必须以Controller的名称结尾,并且直接或者间接的集成Controller。

4、controller和view直接的值传递。
  

1、ASP.NET Core2.0之Model、View、Controller的更多相关文章

  1. VS2017创建一个 ASP.NET Core2.0 应用,并搭建 MVC 框架

    https://testerhome.com/topics/11747 1.使用最新版本的VS2017,并安装.NET Core2.0中相关开发工具   2.打开VS2017,点击文件-新建-项目,选 ...

  2. 一步一步带你做WebApi迁移ASP.NET Core2.0

    随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...

  3. Asp.net Core2.0 缓存 MemoryCache 和 Redis

    自从使用Asp.net Core2.0 以来,不停摸索,查阅资料,这方面的资料是真的少,因此,在前人的基础上,摸索出了Asp.net Core2.0 缓存 MemoryCache 和 Redis的用法 ...

  4. 【翻译】asp.net core2.0中的token认证

    原文地址:https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide token ...

  5. 通过Mysql连接ASP.Net Core2.0(Code First模式)

    ASP.NET Core2.0连接Mysql,首先新建项目 选择Web应用程序 选择需要身份验证: 通过Nuget安装Mysql驱动,这里推荐>Pomelo.EntityFrameworkCor ...

  6. WebApi迁移ASP.NET Core2.0

    WebApi迁移ASP.NET Core2.0 一步一步带你做WebApi迁移ASP.NET Core2.0   随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的AS ...

  7. .Net Core技术研究-WebApi迁移ASP.NET Core2.0

    随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...

  8. 【转】Asp.Net Core2.0获取客户IP地址,及解决发布到Ubuntu服务器获取不到正确IP解决办法

    1.获取客户端IP地址实现方法(扩展类) using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc.ModelBinding; u ...

  9. [翻译]在asp.net core2.0 OpenID Connect Handler中丢失了声明(CLaims)?

    注:这是一篇翻译,来自这里.这篇文章讲述了在asp.net core2.0中使用openid connect handler的过程中解析不到你想要的claim时,你可以参考这篇文章. Missing ...

随机推荐

  1. PyQt5系列教程(二)利用QtDesigner设计UI界面

    软硬件环境 OS X EI Capitan Python 3.5.1 PyQt 5.5.1 PyCharm 5.0.1 前言 在PyQt5系列教程的第一篇http://blog.csdn.net/dj ...

  2. python学习---python基础一

    一.Python介绍 1.python出生与应用 python的创始人是吉多.范罗苏姆(龟叔).1989年圣诞在家闲着无聊,决心开发一个新的脚本解释程序,作为ABC语言的一种继承 python崇尚的是 ...

  3. 跟我学算法-PCA(降维)基本原理推导

    Pca首先 1.对数据进行去均值 2.构造一个基本的协方差矩阵1/m(X)*X^T 3对协方差矩阵进行变化,得到对角化矩阵,即对角化上有数值,其他位置上的数为0(协方差为0),即求特征值和特征向量的过 ...

  4. 【326】PIL 截图及图片识别

    参考:另一种用python识别图片文字的方法 参考:Python人工智能之图片识别,Python3一行代码实现图片文字识别 参考:Python3+Selenium3环境构建填坑之旅 参考:基于pyth ...

  5. Redis的强大之处

    [Redis的强大之处] 1.拥有对脚本的支持(此处是lua),脚本可选择性的缓存. 2.提供HyperLogLog计数器. 3.提供5种数据类型的全方位支持:List.Hash.Set.Ordere ...

  6. 323. Number of Connected Components in an Undirected Graph按照线段添加的并查集

    [抄题]: Given n nodes labeled from 0 to n - 1 and a list of undirected edges (each edge is a pair of n ...

  7. 删除链表中的元素 · Remove Linked List Elements

    [抄题]: Remove all elements from a linked list of integers that have value val. ExampleGiven: 1 --> ...

  8. DIV+CSS布局时, DIV的高度和宽度特性

    这个没有特别的做要求,你要根据你自己的页面整体布局来设置,还有根据div的特性来设置,div默认情况是宽度最大化(100%).高度最小化,高度随着内容自动伸展: 一般情况做网页的话,大部分都是固定了总 ...

  9. vue项目 菜单侧边栏随着右侧内容盒子的高度实时变化

    测试的时候发现,在选择模板.选择产品第二步第三步的时候.如果超出两行的话会盖住看不见,(因为高度所有统一都被写死了,又加了overflow~emmm~)所以要改成走马灯形式.如图: 那么问题来了,我步 ...

  10. 解决CentOS7虚拟机无法上网并设置CentOS7虚拟机使用静态IP上网

    最近在VMware虚拟机里玩Centos,装好后发现上不了网.经过一番艰辛的折腾,终于找到出解决问题的方法了.最终的效果是无论是ping内网IP还是ping外网ip,都能正常ping通.方法四步走: ...