Razor从输入按钮进行页面操作

时间:2018-01-09 22:52:05

标签: onclick visual-studio-mac razor-pages

我试图通过创建一个小型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,获取结果然后根据结果路径)到另一页)但即使我添加一个&#34; onClick&#34;按钮,我无法弄清楚如何将其连接到后面的代码。我已经看到了各种各样的答案,大多数都是使用模型和数据库,但由于这与我所做的不一样,这些例子并没有帮助。

1 个答案:

答案 0 :(得分:0)

我会尝试为你做一个简单的例子。创建一个剃刀页面并使用名称“测试”。 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");
        }
    }
}

告诉我您是否需要此示例的额外说明。我希望它有所帮助。