【问题标题】:MVC 4 posting with POST method doesn't work (with GET method - works)使用 POST 方法发布的 MVC 4 不起作用(使用 GET 方法 - 有效)
【发布时间】:2013-04-23 03:12:12
【问题描述】:

这是我的模型:

public class LoginModel {
    public string username { get; set; }
    public string password { get; set; }
    public string ReturnUrl { get; set; }
}

这是我的控制器标题:

    [AllowAnonymous]
    public ActionResult Login(
        LoginModel model
    )

这是我的看法:

 <form action="@Url.Action("Login", "Login")" method="GET">
        @Html.HiddenFor(m=>m.ReturnUrl)
        User name: @Html.TextBoxFor(f=>f.username)
        <br />
        Password: @Html.PasswordFor(f=>f.password)
        <br /><br />
        <button type="submit">Login</button>
    </form>

当我将表单上的方法从“GET”更改为“POST”时,绑定不起作用。 我尝试添加:

[AcceptVerbs("POST", "GET")]

到控制器标题,它没有帮助

【问题讨论】:

  • GET 和 POST 是否只有一个操作方法?
  • 是的,这不可能吗?

标签: c# html asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

小心,ActionResult Login 不是您的控制器...这是您的操作,请将其添加到操作的标题中:

[HttpPost] 
public ActionResult Login(LoginModel model)
{
  // your code
  return View("NameofView"); //**UPDATE
}

和你的表格:

method="POST"

更新*

请注意,您可以在 return 子句中显式设置视图的名称。 如果您的 POST 正在调用您的登录操作,那是因为您将它明确地放在表单定义中的 action 属性中。

<form action="<Here_your_action>" method="POST">

如果您想同时为 GET 和 POST 执行“操作”,您必须编写两个表单来匹配此定义。

【讨论】:

  • 您好,感谢您的回答,我需要此操作才能同时使用 get 和 post 方法。不可能?
  • @Shahar,我从未将它们一起使用,我不知道这是否可行,但始终是划分责任的最佳做法,但如果您将 Action 重用于 Get 目的,您将传递一个空对象作为参数,如果您想在将来维护此代码,它将变得无法管理。我建议你把 GET 和 POST 分开。
  • 当我将它们分开时,每个请求都会重定向到登录操作(它返回包含用户和密码输入的视图)。我将 [AllowAnonymous] 添加到新的检查方法中,但它仍然存在。也许 web.config 配置有问题?这里是:
  • 如果您不写要返回的视图的名称,并且只执行return View(); 框架(为了约定),它将搜索并尝试返回具有相同操作名称的视图,在本例登录视图。
  • 每个请求都进入“登录”操作,因为这是我在 web.config 中定义的。表单已提交到“LoginCheck”,但由于我没有完成登录,它再次进入“登录”操作。
【解决方案2】:

您可能应该使用:

@using (Html.BeginForm())
{
  @Html.TextBoxForm(model => model.MyField)
}

并且,正如 Max 所说,在您的操作中使用 return View();

【讨论】:

    猜你喜欢
    • 2020-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 1970-01-01
    • 2014-04-10
    • 1970-01-01
    相关资源
    最近更新 更多