剃刀等效于FromQuery属性

时间:2019-08-06 12:59:20

标签: c# asp.net post razor

我正在尝试使用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作为参数处理回发的方法-任何解决方案都将受到欢迎。

1 个答案:

答案 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; }