欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ASP.NET Core使用Razor页面

程序员文章站 2024-02-19 23:48:42
...

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请求。