您无需手动添加隐藏输入字段,也无需通过客户端 Javascript 代码与之交互。使用 ASP.NET 核心和 Razor 的方法是使用标签助手,让 Razor 自己完成实际的 HTML 生成。
这是在页面输入模型中使用 Razor 页面和单个布尔值的示例。我在 Visual Studio 2019 中使用了 ASP.NET Core 3.1 和常用的 ASP.NET Core Web 应用程序模板。
这是页面模型:
public class TestFormModel : PageModel
{
private readonly ILogger _logger;
public TestFormModel(ILogger<TestFormModel> logger)
{
_logger = logger;
}
[BindProperty]
public InputModel Input { get; set; }
public IActionResult OnGet()
{
this.Input = new TestFormModel.InputModel
{
ShowUsername = false
};
return this.Page();
}
public IActionResult OnPost()
{
if (!this.ModelState.IsValid)
{
return this.Page();
}
_logger.LogInformation("The posted value is: {Value}", this.Input.ShowUsername);
return this.RedirectToPage("Index");
}
public class InputModel
{
[Display(Name = "Show User Name")]
public bool ShowUsername { get; set; }
}
}
这是关联的 Razor 视图:
@page
@model StackoverflowTest.Pages.TestFormModel
@{
ViewData["Title"] = "How to build a form with a checkbox";
}
<h1>@ViewData["Title"]</h1>
<form asp-page="TestForm">
<div class="form-check">
<input class="form-check-input" asp-for="Input.ShowUsername">
<label class="form-check-label" asp-for="Input.ShowUsername"></label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
就是这样。您无需在表单中手动添加隐藏输入。您只需要使用正确的标签帮助,ASP.NET 核心就会为您生成正确的表单和表单输入。
2021 年 8 月 2 日更新
有关工作示例,请参阅 this github repository。
作为旁注,请考虑隐藏输入字段是由 ASP.NET 核心自动添加的,并且当表单中的复选框为未选中。
在生成的 HTML 页面源代码中,Input.ShowUsername 基本上有 两个 表单输入。其中一个是具有type="checkbox" 的HTML 输入,另一个是具有type="hidden" 的HTML 输入。 name 属性 (name="Input.ShowUsername") 的值相同,而 value 属性对于复选框输入是 true,对于隐藏输入是 false。
这是表单的 HTML 页面源代码(与 ASP.NET core 3.1 生成的方式完全相同):
<form action="/TestForm" method="post">
<div class="form-check">
<input class="form-check-input" type="checkbox" data-val="true" data-val-required="The Show User Name field is required." id="Input_ShowUsername" name="Input.ShowUsername" value="true">
<label class="form-check-label" for="Input_ShowUsername">Show User Name</label>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8AHG4SVs1BBFruMHNiza3QNKvHNf96d_oiz5J6n3eYuncnlFKqvL4x3G6jbAOmNfJjrwk_crqFN99kjZiBVoboFGd0VQIBlrvmp9fL6p8CMbiZ4f6Cf4rm3OpGZEZ_04UQQ5iuUi3nVjfIgfb5-vctw" />
<input name="Input.ShowUsername" type="hidden" value="false">
</form>
当表单中的复选框被选中时,值true 被发送到名称Input.ShowUsername 的服务器,当取消选中复选框时,值false 被发送到名称Input.ShowUsername 的服务器上: 这是可行的,因为未选中复选框的值不会发布到服务器。
使用type="hidden" 添加输入是在复选框未选中时发布默认值的常见模式,请参阅here 了解有关 HTML 复选框工作方式的说明。
同样,所有这些都是由 ASP.NET 核心自动为您生成的:您只需定义页面输入模型并使用适当的 Razor 标签助手。