2013-04-29 91 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();