如何解决无法在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]。
谢谢。
解决方法
RedirectToPage
是Razor 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();
}
,
在您的LogoutController中,将LogOff属性更改为[HttpPost],然后在Accounting.cshtml中删除:asp-controller =“ LogOutController”也尝试在Html.Beginform中重命名LogOut。注销
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。