【问题标题】:HttpPost not getting triggeredHttpPost 没有被触发
【发布时间】:2016-08-18 17:40:51
【问题描述】:

我有一个网站,我需要根据用户的角色在其中重定向用户。单击按钮时,如果用户是管理员,则重定向到另一个页面;否则重新加载同一页面。点击按钮,无论谁登录,都会加载索引页面。调试时发现,[HttpPost]属性根本没有触发。

查看:

@model namespace.ViewModels.LoginVM
@{
    ViewBag.Title = "Login";
}

<h1>User Login</h1>
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
    <br />
    <div style="background-color: skyblue; width: 50%">
    <div style="padding-left: 1em">
        <div class="display-label" style="font-size: large">
            Enter User Info<br />
            <br />
        </div>
        <div>
            <div class="editor-label">@Html.LabelFor(model => model.empID)</div>
            <div class="editor-field">@Html.TextBoxFor(model => model.empID)
                @Html.ValidationMessageFor(model => model.empID)
            </div>
            <br />
        </div>
        <br />
        <div>
            <input id="submit" type="submit" value="Submit" />
        </div>
    </div>
    </div>
    <br />
}

控制器:

public class LoginController : Controller
{
    [HttpGet]
    public ActionResult Login()
    {           
        return View();
    }

    [HttpPost]
    public ActionResult Login(LoginVM model) 
    {
        MySQL msql = new MySQL();            
        var empID= model.empID
        var role = msql.Select("Select `role` from empDB where `eID` = '" + empID + "'");
        if(role == "admin") 
        { 
            return RedirectToAction("Index","Home"); 
        }
        else 
        {
            return View(); 
        }            
    }
}

【问题讨论】:

  • 当你调试这个时,它是怎么失败的?正在执行的数据库查询是什么? role中存储的结果是什么?
  • 无论我输入什么empID,我的代码都不会检查它是否为role,用户会被重定向到index 页面。我的代码查询empID并将empID的角色输入到变量role中。
  • "my code doesn't check for it's role" - 所以整个方法根本没有被执行?那么正在执行什么实际问题在哪里?您需要具体,这里没有人可以为您调试。
  • 目前尚不清楚您面临什么问题。您是否尝试在代码中放置断点并查看发生了什么?当断点命中时检查变量的值。
  • 我的控制器从[HttpGet]返回View()。它没有到达 [HttpPost] ,即我的查询根本没有执行。

标签: asp.net-mvc-3 razor


【解决方案1】:

您的 HttpPost 操作方法名称是 Login。但是你的剃刀观点,你使用了索引!

更新您的Html.BeginForm 方法调用,以获得正确的操作方法名称和控制器名称值。然后当你点击提交时,它会将表单数据发布到/Login/Login

@using (Html.BeginForm("Login", "Login", FormMethod.Post))
{

}

【讨论】:

  • 我明白了。我进行了更改,但仍然无法正常工作。
  • 点击提交按钮时发生了什么?它不是将表单数据发布到您的 http post 操作方法吗?
  • 是的,它会将我重定向到同一页面。似乎HttpPost 在点击提交按钮时没有被触发。
  • 我强烈的感觉是,它正在发布到 HttpPost 操作方法,但在你的 if 条件 if(role == "admin") 返回 false ,因此它返回相同的视图。你为什么不在你的 http post 操作方法中设置一个断点并验证呢?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
  • 2012-06-03
  • 2019-11-07
  • 2018-09-01
  • 2018-12-03
  • 2021-04-23
  • 2019-01-30
相关资源
最近更新 更多