.net 按钮未在控制器类中执行正确的方法

.net 按钮未在控制器类中执行正确的方法,.net,asp.net-core,.net-core,.net,Asp.net Core,.net Core,我是.NETCore的新手,正在创建我的第一个小程序。在应用程序中,我单击一个按钮,它应该执行一个执行操作的方法。根据我在网上发现的情况,这样做应该相当简单。不幸的是,我的研究似乎遗漏了一些东西。按钮一直在调用错误的方法。一定有我丢失的餐具。我理解它的方式,我需要做的就是在asp控制器放置我想要使用的控制器之后,在asp操作放置方法之后。不幸的是,它总是调用启动时调用的方法 <form method="post"> <button asp-controller="Bro

我是.NETCore的新手,正在创建我的第一个小程序。在应用程序中,我单击一个按钮,它应该执行一个执行操作的方法。根据我在网上发现的情况,这样做应该相当简单。不幸的是,我的研究似乎遗漏了一些东西。按钮一直在调用错误的方法。一定有我丢失的餐具。我理解它的方式,我需要做的就是在asp控制器放置我想要使用的控制器之后,在asp操作放置方法之后。不幸的是,它总是调用启动时调用的方法

<form method="post">
    <button asp-controller="Brochure" asp-action="Recall">Click Me</button>

</form>
我要调用的方法:

 public class BrochureController : Controller
{


    [HttpPost]

    public String Recall()
    {
        //Product product = repository.Products
        //.FirstOrDefault(p => p.ProductID == productId);
        //if (product != null)
        //{
        //    cart.RemoveLine(product);
        //}
        return "Recall Test";
        //return View("ReloadOrders");
    }
启动:

 public class Startup
{
    public IConfiguration Configuration { get; set; }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();
        services.AddSingleton<IMessageService, ConfigurationMessageService>();
        services.AddSingleton(provider => Configuration);
    }
    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env, IMessageService msg)
    {           
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=BrochureMain}/{id?}");
        });
        app.Run(async (context) =>
        {               
            await context.Response.WriteAsync(msg.GetMessage());
        });
    }
    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json");
        if (env.IsDevelopment())

        Configuration = builder.Build();
    }       
}

asp控制器/asp操作属性位于窗体上,而不是按钮。

asp控制器/asp操作属性位于窗体上,并使用按钮作为提交类型

<form method="post" asp-controller="Brochure" asp-action="Recall">
<button type="submit" >Click Me</button>

创业课程。

我并不怀疑你,但我的观点似乎有所不同,也许我看错了文件?这只是.NETCore3.0的一个特性吗?不是,但这是formaction标记的帮助程序。它用于生成formaction属性,该属性应覆盖表单上的主操作,但无论出于何种原因,它似乎不适合您。不过,使用它的唯一原因是,如果您需要有多个提交按钮,并将每个按钮发送到不同的操作,这在一开始就不是一个很好的设计。在你的例子中,你只有一个,所以在表单标签上的操作更合适,这样也更简单。我不是OP,我只是想找出他们的问题:我甚至不知道那些标签会出现在按钮上!谢谢你的信息。克里斯,我在一张表格上有几个提交按钮。我把这个分离出来,这样我就可以玩它,并找出如何让它工作。你能告诉我为什么这是一个糟糕的设计和什么会更好?我正在努力不写糟糕的代码,所以我想知道最好的方法。
<form method="post" asp-controller="Brochure" asp-action="Recall">
<button type="submit" >Click Me</button>
 app.Run(async (context) =>
    {               
        await context.Response.WriteAsync(msg.GetMessage());
    });