Html.BeginForm()函数有一个问题,每当我在_Prijava.cshtml中按下OkButton提交时,它都会在Controller中运行Prijava()操作。
这是LoginController.cs
namespace BumCoreWebAppMVC.Controllers
{
    [Route("[controller]/[action]")]
    public class LoginController : Controller
    {
        [HttpGet] 
        [Route("/bum/Prijava.cshtml")]   
        public IActionResult Prijava()
        {
            var model = new LoginViewModel();
            return View("Prijava", model);
        }
        [HttpPost]
        public IActionResult OkButton(LoginViewModel model)
        {
            //...
            return View("Index");
        }
    }
}这是视图Prijava.cshtml
@model BumCoreWebAppMVC.Models.LoginViewModel
@{
    ViewData["TitleHeader"] = "Prijava";
    Layout = "./BumLayout";
}
<!-- ... -->
@await Html.PartialAsync("/Views/Login/_Prijava.cshtml", Model)
<!-- ... -->这是部分视图_Prijava.cshtml
@model BumCoreWebAppMVC.Models.LoginViewModel
@{}
@using (Html.BeginForm("OkButton", "Login", FormMethod.Post)){
    @Html.TextBoxFor(p => p.TextBox_ID, new {@class="form-control ", placeholder = "ID"})       
    <button type="submit">Submit</button>
}据我所见,这应该是可行的。我怀疑我的Program.cs设置不正确:
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllersWithViews();
builder.Services.AddHttpContextAccessor();
builder.Services.AddSingleton<HttpContextAccessor>();
builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSession();
app.UseRouting();
app.UseAuthorization();
app.MapControllers();
app.Run();奇怪的是,如果我将OkButton()操作更改为[HttpGet]并使用@Html.ActionLink("Submit", "OkButton", "Login"),它就能很好地工作,并且可以找到正确的操作。然而,Html.BeginForm("OkButton", "Login", FormMethod.Get)仍然无法运行它。
发布于 2022-09-04 23:59:16
我找到了最令人难以置信的解决方案。
第一个@using (Html.BeginForm())似乎总是调用错误的操作,但下一个操作将正确工作。因此,简单地将@using (Html.BeginForm()){ }添加到_Prijava.cshtml页面的顶部将使其他页面正常工作。
发布于 2022-09-03 21:21:52
这是因为您没有在文件中设置属性路由。
在解决方案资源管理器中,导航到App_Start文件夹并打开RouteConfig.cs文件。
添加下面一行:下面的routes.IgnoreRoute("{resource}.axd/{*pathInfo}");行
routes.IgnoreRoute...;
routes.MapMvcAttributeRoutes();最后一步:不要在Route属性的开头使用尾随斜杠。用这条线代替你的路线
[Route("bum/Prijava.cshtml")]https://stackoverflow.com/questions/73594986
复制相似问题