2013-04-29 90 views
2

这是我的模型:MVC 4发布与POST方法不起作用(用GET方法 - 作品)

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

控制器头,它不利于

+0

您对GET和POST只有一个操作方法吗? – Shyju 2013-04-29 12:45:20

+0

是的,这不可能吗? – Shahar 2013-04-29 14:12:51

回答

3

要当心,ActionResult Login是不是你的控制器...这是你的行动,在头部添加这个您动作:

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

和您的形式:

method="POST" 

ü PDATE *

看到您可以在return子句中显式设置视图的名称。 如果你的POST调用你的登录动作,那是因为你明确地把它放在你的表单定义中的action属性中。

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

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

+0

嗨,谢谢你的回答, 我需要这个动作来处理get和post方法。不可能? – Shahar 2013-04-29 14:08:52

+0

@Shahar,我从来没有将它们一起使用,我不知道这是否可行,但始终是一种最佳实践来划分责任,但是如果您重新使用Action for Get目的,那么您将传递一个空对象作为参数,并且如果您要维护代码在未来将变得难以管理。我建议你分成一个单独的GET和POST。 – 2013-04-29 14:22:04

+0

当我将它们分开时,每个请求都会重定向到Login操作(它将返回包含用户和密码输入的视图)。我将[AllowAnonymous]添加到新的检查方法中,但它仍然在那里。 也许与web.config配置有关的问题?这里是: Shahar 2013-04-29 15:40:16

1

你应该使用:

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

而且,正如马克斯说,在你的行动使用return View();