如何根据单击的按钮将相同的数据发布到两个不同的处理程序?

时间:2019-11-27 13:03:42

标签: asp.net-core razor-pages asp.net-core-tag-helpers

[查看底部的更新]

我有一个带有表单的Razor页面。我希望该表单上有两个按钮,它们执行的操作略有不同-都使用相同的发布表单数据。

我尝试在第二个按钮上使用asp-page-handler帮助器,但似乎没有向HTML添加任何内容(我希望它为{{1}添加一个formaction属性}元素,但根本不添加任何内容。

这是一个示例页面:

<button>

...这是对应的页面模型:

@page  "{id?}"
@model IndexModel

@tagHelperPrefix x:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

<p>Current value is @Model.Foo</p>

<x:form method="post">
    <input type="text" name="foo" />
    <button type="submit">Default</button>
    <button type="submit" x:asp-page-handler="Alternative">Alternative</button>
</x:form>

这表示为:

enter image description here

...该表单生成的HTML为:

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;

namespace MyWebApplication.Pages
{
    public class IndexModel : PageModel
    {
        [BindProperty]
        public string Foo { get; set; }

        public void OnGet(int? id)
        {
        }

        public void OnPostAsync(string foo)
        {
            Foo = foo;
        }

        public void OnPostAlternativeAsync(string foo)
        {
            Foo = foo.ToUpper();
        }
    }
}

<form method="post"> <input type="text" name="foo" /> <button type="submit">Default</button> <button type="submit" x:asp-page-handler="Alternative">Alternative</button> </form> 属性仍在生成的HTML中的事实使我认为Razor引擎无法识别它。我试过摘下x:asp-page-handler前缀,但这没有帮助。

我在做什么错了?


更新

好的,我尝试删除标签前缀 并删除x:行,这有所作为。 @tagHelperPrefix已按预期添加到第二个formaction元素。

但是:

  • 这真的很烦人-<button>不是我想要失去的东西,并且
  • 现在两个按钮都在触发“替代”操作,即使其中只有一个具有@tagHelperPrefix

这是新生成的HTML:

formaction

第二次更新

好的,所以如果我将<form method="post"> <input type="text" name="foo" /> <button type="submit">Default</button> <button type="submit" formaction="/?handler=Alternative">Alternative</button> </form> 放在“默认”按钮上,那么每个按钮都将转到正确的处理程序,就可以了。

那么,剩下的最后一个问题是:我该如何使用标签帮助程序前缀

1 个答案:

答案 0 :(得分:0)

[回答我自己的问题,以免对他人有帮助。]

事实证明:

  1. tag-helper-prefix仅适用于元素,不适用于属性,因此即使该标签的前缀为asp-page-handler="..."而不是x:asp-page-handler="..." tag-helper-prefix是x:
  2. 这些asp-属性仅在启用了标签辅助功能的标签中被识别-当未指定标签辅助功能前缀时,这些属性是 all 个元素,或者仅指定带有标签辅助功能的元素tag-helper-prefix,其中指定了一个。就我而言,我不得不将<button ...>更改为<x:button ...>
  3. 如果为一个按钮指定asp-page-handler,则需要在所有所有按钮上指定它,即使您将其指定为""也是默认操作。 / li>