来自输入按钮的 Razor Pages 操作

Razor Pages action from input button

我试图通过创建一个小型 Web 应用程序来了解 Razor 页面以及 .Net Core 的工作原理,但我一直在研究如何处理表单中的按钮操作。我已经习惯了 MVC 类型的流程(从 5 年前我第一次尝试网络应用程序开始),其中按钮会有一个 onClick 操作,可以从后面的代码访问它,但它似乎与 Razor 页面不一样(除非我只是没有看到它)。我有一个像这样的基本形式

<form method="post">
<fieldset>
<input type="text" value="" placeholder="user name"/>
<input type="password" value="" placeholder="password"/>
<input type="button" value="Submit" id="submitButton"/>
</fieldset>

所以我想要实现的是当按下按钮时调用 .cs 文件中的一个动作,它将执行几个不同的操作(比如调用 API,获取结果然后取决于到不同页面的结果路由)但即使我向按钮添加 "onClick" 我也无法弄清楚如何将它连接到后面的代码。我已经看到了各种答案,大多数都使用模型和数据库,但由于这与我正在做的不同,所以这些示例没有帮助。

我会尽量为你做一个简单的例子。创建一个剃须刀页面并使用名称 "Test"。 Test.cshtml 文件应包含以下内容:

@page
@model WebApplication1.Pages.TestModel
<form method="post">
    <fieldset>
        <input asp-for="username" placeholder="user name" />
        <span asp-validation-for="username" class="text-danger"></span>

        <br />

        <input asp-for="password" type="password" placeholder="password" />
        <span asp-validation-for="password" class="text-danger"></span>

        <br />

        <input type="submit" value="Submit" id="submitButton" />
    </fieldset>
</form>

Test.cshtml.cs 应该有以下内容

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace WebApplication1.Pages
{
    public class TestModel : PageModel
    {
        [BindProperty]
        public string username { get; set; }

        [BindProperty]
        public string password { get; set; }

        public void OnGet()
        {
            // you can initialize the values. for example I set the username
            username = "test";
        }

        public IActionResult OnPost()
        {
            // do something with username and password

            if (string.IsNullOrEmpty(password))
            {
                ModelState.AddModelError("password", "Password is a required field.");
                return Page();
            }

            // or you can redirect to another page
            return RedirectToPage("./Index");
        }
    }
}

如果您需要对此示例进行额外解释,请告诉我。希望对你有帮助。