MVC:如何将输入按钮链接到不同的操作?

时间:2018-04-05 18:06:16

标签: c# asp.net asp.net-mvc routing

我在Home.cshtml中有这个链接(这个ActionResult为__exit__()

contextlib.closing()

假设链接到此控制器

with closing((psycopg2.connect(dbase='db', user='zzz')))as conn:
        ...

我使用此

实现了这一点
public ActionResult Home()

和这个

<li class="home-links home-middleLast">@Html.ActionLink("Log out", "LogOut", "Home")</li>

我担心的是有人可以在网址中输入// /LogOut public ActionResult LogOut() { FormsAuthentication.SignOut(); TempData.Clear(); Session.Abandon(); getDB.Close(); return RedirectToAction("Home"); } ,然后会退出该帐户。我怎样才能让人们不这样做呢?

我想这样做,所以你必须点击链接注销,而不是在网址中输入[Route("~/log_out")]

3 个答案:

答案 0 :(得分:0)

我认为这是一种愚蠢的方式..但你可以试试这个

<li class="home-links home-middleLast"><form action="@Url.Action("LogOut","Home")" method="post"><button type="submit">Log Out</button></form></li>

并在您的操作上方添加[HttpPost]

//LogOut
[HttpPost]
public ActionResult LogOut()
{
    FormsAuthentication.SignOut();
    TempData.Clear();
    Session.Abandon();
    getDB.Close();
    return RedirectToAction("Home");
}

但是......您必须更改“注销”按钮并将其设置为样式,使其看起来像是与css的链接

答案 1 :(得分:0)

这需要脚本:

public ActionResult LogOut()
{
    if (Request.IsAjaxRequest())
    {
        FormsAuthentication.SignOut();
        TempData.Clear();
        Session.Abandon();
        getDB.Close();
        return Json(true, JsonRequestBehavior.AllowGet);
    }

    return Json("Invalid request", JsonRequestBehavior.AllowGet);
}

和行动:

//one button
var mySingleButton = new THREE.Mesh()

//hide one button
mySingleButton.visible = false 

//show one button
mySingleButton.visible = true

答案 2 :(得分:0)

查看

using (Html.BeginForm("LogOut", "Home", FormMethod.Post))
{
    <li class="home-links home-middleLast"><input type="submit" value="Log out"/></li>
}

控制器

[HttpPost]
[Route("")]
[Route("~/home")]
public ActionResult LogOut()
{
    FormsAuthentication.SignOut();
    TempData.Clear();
    Session.Abandon();
    getDB.Close();
    return RedirectToAction("Home");
}

我将主路由放在LogOut控制器上也是HttpPost。这只会在按下按钮时触发。

编辑:我没有使用我之前提交的答案。我实际上使用了这个https://stackoverflow.com/a/14194770/6804700