我正在尝试使用Razor页面使用ASP.NET用简单的表单构建一个简单的页面,并且无法弄清楚如何处理特定的回发。特别是(通过我无法控制的因素)我得到了一个带有小写和kebab-case单个查询参数的回发,在常规的MVC页面中,我可以使用FromQuery
属性,但是它没有在这种情况下,无论有没有属性我每次都将null
传递给OnPostAsync
时,似乎没有用。下面的示例来说明此问题:
Example.cshtml
@page
@model my_namespace.Pages.ExampleModel
@{
ViewData["Title"] = "Example Title";
}
<h2>Example</h2>
<form method="post">
<!--- In actual code I don't have control of the name, so this is for illustrative purposes. --->
<input type="text" name="kebabbed-name"/>
<input type="submit" />
</form>
Example.cshtml.cs
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
namespace my_namespace.Pages
{
public class ExampleModel : PageModel
{
public async Task<IActionResult> OnGetAsync()
{
return Page();
}
// This method is hit as expected, but the parameter is always null.
// Changing the input name to something like "sample" and this parameter to match works however.
public async Task<IActionResult> OnPostAsync(string kebabbedName)
{
// Handling of the Post request
return Page();
}
}
所以我正在寻找一种以kebabbed-name作为参数处理回发的方法-任何解决方案都将受到欢迎。
答案 0 :(得分:2)
Razor页面似乎不能自动处理 kebabbed-names ,但是您可以在PageModel
类中创建一个属性,并使用一个应绑定到回发值的自定义名称
// For GET request
// [BindProperty(Name = "kebabbed-name", SupportsGet = true)]
// For POST request
[BindProperty(Name = "kebabbed-name")]
public string kebabbedName { get; set; }