[查看底部的更新]
我有一个带有表单的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>
这表示为:
...该表单生成的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>
放在“默认”按钮上,那么每个按钮都将转到正确的处理程序,就可以了。
那么,剩下的最后一个问题是:我该如何使用标签帮助程序前缀?
答案 0 :(得分:0)
[回答我自己的问题,以免对他人有帮助。]
事实证明:
asp-page-handler="..."
而不是x:asp-page-handler="..."
tag-helper-prefix是x:
。asp-
属性仅在启用了标签辅助功能的标签中被识别-当未指定标签辅助功能前缀时,这些属性是 all 个元素,或者仅指定带有标签辅助功能的元素tag-helper-prefix,其中指定了一个。就我而言,我不得不将<button ...>
更改为<x:button ...>
。asp-page-handler
,则需要在所有所有按钮上指定它,即使您将其指定为""
也是默认操作。 / li>