【问题标题】:how to call controller/action from button click in mvc 4如何从 mvc 4 中的按钮单击调用控制器/动作
【发布时间】:2017-09-19 21:28:50
【问题描述】:

我有一个简单的登录屏幕。单击按钮时,我想调用 Home 控制器中定义的 LoginUser 操作。我收到 HTTP 404,找不到资源错误。点击按钮后的地址栏显示“http://localhost:13805/Home/LoginUser”。我不确定我在这里做错了什么。非常感谢您对此的任何帮助。

这是按钮:

<button type="submit" onclick="location.href='@Url.Action("LoginUser", "Home")'" class="btn btn-default">Submit</button>

这是 Home 控制器中定义的操作:

[HttpPost]
    public ActionResult LoginUser(string username, string password)
    {
        bool loginSuccess = false;
        if (!HttpContext.User.Identity.IsAuthenticated)
        {
            AuthenticationMode = System.Configuration.ConfigurationManager.AppSettings["AuthenticationMode"];
            if (AuthenticationMode.Equals("Forms"))
            {
                int userId = CheckUserLogin(username);
                if (userId > 0)
                {
                    CurrentUserId = userId;
                    FormsAuthentication.SetAuthCookie(username, false);
                    LoadMenu();
                    loginSuccess = true;
                }
                else
                {
                    loginSuccess = false;
                }
            }
            else
            {
                loginSuccess = false;
            }
        }
        else
        {
            loginSuccess = true;
        }

        if (loginSuccess)
        {
            return RedirectToAction("Index", "home");
        }
        else
        {
            return RedirectToAction("Login", "home");
        }            
    }

【问题讨论】:

  • 为什么你有一个onclick()事件调用一个GET方法,附加到一个提交按钮调用一个POST方法?你想做什么?

标签: asp.net-mvc


【解决方案1】:

您的提交按钮不应具有 onclick 操作。

它应该提交一个表单,其操作是您的端点(“LoginUser”、“Home”),您已正确设置它以接受 HttpPost

你需要一个类似这样的表单:

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

<!-- form here -->
<button type="submit" class="btn btn-default">Submit</button>

}

【讨论】:

  • 谢谢你,它工作得很好。我目前正在使用 _layout.cshtml 文件,并在其中声明了我的表单。我可以在同一个视图中有 2 个表单吗?我们如何在一个表单中处理链接到 2 个不同控制器/动作的 2 个按钮?
  • @user2615296 如果我将两个具有两种不同操作的按钮放入一个表单中,我会向按钮添加 javascript 点击事件并让 javascript 进行序列化和 POST。
  • 非常感谢,我会试试的。
【解决方案2】:

或者,您可以将按钮类型从“提交”更改为“按钮”,然后您的代码应该可以正常工作。

下面是我的工作代码示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-15
    • 2018-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    相关资源
    最近更新 更多