使用POST方法发布MVC 4不起作用(使用GET方法 - 工作)

时间:2013-04-29 12:40:55

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

这是我的模特:

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")]

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

2 个答案:

答案 0 :(得分:3)

小心点,ActionResult Login不是你的控制者...这是你的行动,在行动的标题中添加:

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

和你的表格:

method="POST"

UPDATE *

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

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

如果你想为GET和POST做两个“动作”,你必须编写两个表格来匹配这个定义。

答案 1 :(得分:1)

您应该使用:

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

而且,正如Max所说,在你的行动中使用return View();