ASP.NET Core使用Razor页面
ASP.NET Core使用Razor页面
Razor是ASP.NET的页面引擎,在ASP.NET MVC 3以后被广泛使用,我在之前的博客中有所介绍,需要更多了解的朋友请移步【Razor语法】
在ASP.NET中,我们仍然使用Razor来构建Web页面。
首先使用Visual Studio 2017创建一个Web应用程序,打开创建好的项目,可以看到VS已经为我们创建好了项目的结构:
| 文件/文件夹 | 说明 |
|---|---|
| wwwroot | 静态文件目录 |
| Pages | Razor页面 |
| appsettings.json | 配置 |
| Program.cs | 托管ASP.NET Core的应用 |
| Startup.cs | 应用启动类,用于配置应用程序 |
与空白应用程序不同的是,Web应用默认为我们引用了MVC管道,代码在Startup文件中:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection 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)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
}
app.UseStaticFiles();
app.UseMvc();
}
接下来我们创建一个自己的Razor页面。
Hello World 页面
在Razor文件夹邮件,选择Razor,不使用模板页,创建好以后,可以看到生成了两个文件:
| 文件名 | 说明 |
|---|---|
| HelloWorld.cshtml | Razor页面 |
| HelloWorld.cshtml.cs | Razor页面对应的Model |
如果需要修改HTML代码,则在Razor页面中进行修改;数据、页面行为等内容则在Model文件中进行修改。
运行我们的HelloWorld页面,Razor对应的页面地址为:~/HelloWorld。
添加Model字段
为了测试Model的用法,我们在Model中添加两个字段,并在OnGet方法中赋值,修改后的Model如下:
public class HelloWorldModel : PageModel
{
/// <summary>
/// 操作
/// </summary>
public string Method { get; set; }
/// <summary>
/// 服务器时间
/// </summary>
public string ServerTime
{
get
{
return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
}
}
public void OnGet()
{
this.Method = "Get";
}
}
对页面进行修改,添加显示Model中字段的代码:
<body>
<h1>Hello World</h1>
<p>
Method:@Model.Method
</p>
<p>
Server time:@Model.ServerTime
</p>
</body>
编译应用程序,刷新浏览器中的页面查看效果。
添加POST操作
添加新的实体Visitor:
public class Visitor
{
public string Name { get; set; }
public string Email { get; set; }
}
在Model中添加OnPost代码:
/// <summary>
/// 访客
/// </summary>
[BindProperty]
public Visitor Visitor { get; set; }
/// <summary>
/// Post操作
/// </summary>
public void OnPost(Visitor visitor)
{
this.Method = "Post";
this.Visitor = visitor;
}
对Visitor字段使用了BindProperty特性,表明这个字段进行绑定操作。
对页面进行修改:
<form method="post">
<p>
<label>姓名:</label>
<input type="text" asp-for="Visitor.Name" />
</p>
<p>
<label>邮箱:</label>
<input type="text" asp-for="Visitor.Email" />
</p>
<input type="submit" value="提交" />
</form>
刷新页面,填写相应的信息,随后点击提交按钮,OnPost方法可以正常接收到参数,更新后的页面也可以带出刚才提交的数据。
添加数据验证
public class Visitor
{
[Required]
[StringLength(20, MinimumLength =5)]
public string Name { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
}
使用DataAnnotations对Visitor类中的字段进行标注。然后在OnPost中进行验证:
/// <summary>
/// Post操作
/// </summary>
public IActionResult OnPost()
{
if (!ModelState.IsValid)
{
return Redirect("~/HelloWorld");
}
this.Method = "Post";
return Page();
}
此时,如果提交的数据不能通过验证,则页面跳转到Get请求。
ASP.NET Core使用Razor页面的更多相关文章
- 独立使用Asp.net Core 的razor模板 (一):Razor引擎的一些细节
由于最近需要写一些界面稍微好看点的Winform程序,如果用原生控件,,想要达到好看的程度,需要花费比较大的功夫,因为之前使用过CefSharp,因此发觉如果是使用CEF+Html的方式,界面可以相对 ...
- [译]ASP.NET Core揭秘 - Razor Pages
原文 什么是Razor Pages? Razor pages是ASP.NET Core 2.0的新特性,它被设计用来更快的开发页面,比传统的MVC模式更便捷. 创建项目 为了使用Razor Pages ...
- Asp.net core中由于页面编码导致的中文乱码
问题描述 最近使用asp.net core写了一个简单的网站,在windows系统下完全没有出现问题.后来在linux系统中搭建了docker,并且在linux中自动使用git获取源码,编译,部署一条 ...
- Asp.Net Core Mvc Razor之RazorPage
在AspNetCore.Mvc.Razor命名空间中的RazorPage继承RazorPageBase,并定义的属性为: HttpContext Context 表示当前请求执行的HttpContex ...
- asp.net core 的 razor pages 如何使用ajax调用后台方法
Razor 是一种允许您向网页中嵌入基于服务器的代码(Visual Basic 和 C#)的标记语法. 当网页被写入浏览器时,基于服务器的代码能够创建动态内容. 在网页加载时,服务器在向浏览器返回页面 ...
- asp.net core + 前端H5 页面视频站制作尝试
.net core 2.1出来一段时间了,一直关注,前周花了半天时间学习了一下,特制作了一个视频小站(欢迎扫码体验): 页面首页效果如下: 播放页面效果如下: 部分代码: using ENT.IBLL ...
- ASP.NET Core 中的 Razor 页面介绍
标题:ASP.NET Core 中的 Razor 页面介绍 地址:https://docs.microsoft.com/zh-cn/aspnet/core/razor-pages/index?view ...
- 学习ASP.NET Core Razor 编程系列一
一. 概述 .NET Core 1.0发布的时候就想进行学习的,不过根据微软的以往的发布规律1.0版可以认为是大众测试版,2.0才算稳定.现在2.1都已经发布了预览版,之前对其"不稳定&qu ...
- [Asp.Net Core] Blazor WebAssembly - 工程向 - 如何在欢迎页面里, 预先加载wasm所需的文件
前言, Blazor Assembly 需要最少 1.9M 的下载量. ( Blazor WebAssembly 船新项目下载量测试 , 仅供参考. ) 随着程序越来越复杂, 引用的东西越来越多, ...
随机推荐
- flink的Standalone集群安装
1:上传安装包到linux系统 使用rz命令 2:解压 tar –zxvf flink-1.5.0-bin-hadoop24-scala_2.11.tgz 3:修改配置文件 vim conf/flin ...
- NowCoder Wannafly 27E 黄魔法师 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-Wannafly27E.html 题目传送门 - NowCoder Wannafly 27E 题 ...
- UOJ#30/Codeforces 487E Tourists 点双连通分量,Tarjan,圆方树,树链剖分,线段树
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ30.html 题目传送门 - UOJ#30 题意 uoj写的很简洁.清晰,这里就不抄一遍了. 题解 首先建 ...
- 51Nod1309 Value of all Permutations 期望
原文链接https://www.cnblogs.com/zhouzhendong/p/51Nod1309.html 题目传送门 - 51Nod1309 题意 长度为N的整数数组A,有Q个查询,每个查询 ...
- Codeforces 980E The Number Games 贪心 倍增表
原文链接https://www.cnblogs.com/zhouzhendong/p/9074226.html 题目传送门 - Codeforces 980E 题意 $\rm Codeforces$ ...
- jdk 生成证书
1.生成客户端的私钥,客户端的证书 1)keytool -genkey -alias clientkey -keystore kclient.keystore -validity 36500 2) ...
- ajax请求后台,response.sendRedirect失效,无法重定向
今天在写项目的时候,想加一个切换用户,需要清除session并且跳转到登录页面,发起一个ajax请求后,执行完发现无法跳转. 原因在于: (从网上摘录) Ajax只是利用脚本访问对应url获取数据而已 ...
- 20165235 实验二Java面向对象程序设计
20165235 Java面向对象程序设计 姓名:祁瑛 学号:20165235 班级:1652 实验课程:JAVA程序设计 实验名称:Java面向对象程序设计 实验时间:2018.4.14 指导老师: ...
- 模运算(附加几种数据类型的数据范围判断)-hdu3123
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3123 预备知识点: (a+b)%m=[(a%m)+(b%m)]%m(a*b)%m=[(a%m)*(b% ...
- Codeforces 1105C Ayoub and Lost Array (计数DP)
<题目链接> 题目大意: 有一个长度为 n 的数列的未知数列,数列的每一个数的值都在区间 [l,r] 的范围内.现在问你能够构成多少个这样的数组,使得数组内的所有数的和能够被 3 整除. ...