【问题标题】:Cannot trigger controller event on Razor Page [ASP.NET MVC]无法在 Razor 页面 [ASP.NET MVC] 上触发控制器事件
【发布时间】:2020-10-28 18:55:46
【问题描述】:

我正在学习 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");
    }
}

我做错了什么?整个下午我都在试图弄清楚为什么它不起作用,我搜索了很多。 能否请您也提供一个解释。

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

谢谢。

【问题讨论】:

  • 嗨@Michael,有关于这个案例的最新消息吗?

标签: html asp.net asp.net-mvc asp.net-core


【解决方案1】:

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();
    }

结果:

【讨论】:

  • 您好,谢谢!我只是按照您的建议尝试了,但它不起作用。我像你一样在“{”上设置了一个断点,但它甚至没有调用函数 LogOff。
  • 删除视图中的asp-controller="LogOutController"代码,logoff动作必须是[HttpPost]
  • 如果还有问题,您可以与我们分享您的项目结构。
【解决方案2】:

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

【讨论】:

  • 请注意在您的注销方法中您正在重定向到索引,因此请确保您在注销文件夹下的视图中有一个名为 Index.cshtml 的 html 页面。
猜你喜欢
  • 2021-12-20
  • 2020-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 2019-03-17
相关资源
最近更新 更多