无法在Razor页面[ASP.NET MVC]上触发控制器事件

问题描述

我正在学习ASP.net,并且正在使用剃须刀页面。 我正在尝试将按钮连接到控制器,但是当我单击按钮时,它只是刷新页面

Accounting.cshtml:

@using (Html.BeginForm("logoff","logout",FormMethod.Post))
        {
            <a class="logoutLblPos">
                <input type="submit" id="logoutbtn" value="logoff" asp-controller="logoutController">
            </a>
        }

logoutController.cs:

public class logoutController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpGet]
    public async Task<IActionResult> logoff()
    {
        FormsAuthentication.SignOut();
        System.Web.HttpContext.Current.Session.Clear();
        System.Web.HttpContext.Current.Session.Abandon();
        System.Web.HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId",""));
        return RedirectToPage("Index");
    }
}

我在做什么错?整个下午,我都在努力弄清为什么它不起作用,我在Google上搜索了很多。 您还可以提供一个解释吗?

PS:我已经尝试过[HttpGet]和[HttpPost]。

谢谢。

解决方法

RedirectToPageRazor Pages中的语法,Razor Pages是Asp.net核心中的应用程序。

由于MVC不包含Razor Pages,因此您的项目看起来完全是Controller项目。

有关Razor Pages的详细说明,请参见here

您可以按以下方式修改代码,以使您的应用程序正常运行:

Accounting.cshtml:

@using (Html.BeginForm("LogOff","Logout",FormMethod.Post))
{
<a class="logoutLblPos">
    <input type="submit" id="logoutbtn" value="LogOff">
</a>
}

LogoutController.cs(使用[HttpPost]RedirectToAction):

 public IActionResult Index()
    {
        return View();
    }
    [HttpPost]
      public async Task<IActionResult> LogOff()
    { 
        //...
        return RedirectToAction("Index");
    }
    public IActionResult Accounting()
    {
        return View();
    }

结果: enter image description here

,

在您的LogoutController中,将LogOff属性更改为[HttpPost],然后在Accounting.cshtml中删除:asp-controller =“ LogOutController”也尝试在Html.Beginform中重命名LogOut。注销