2009-12-07 54 views
2

我是ASP.MVC的新手。我的背景是在ASP.NET Web Forms中,我認爲這是造成我的困惑。我知道「M」基本上代表數據源,「V」代表我請求的資源,「C」代表最終用戶顯示的內容。但後來我感到困惑。ASP.NET MVC - 導航方法

例如,我只是想創建一個登錄屏幕。我設想訪問「http://www.myapp.com/Account/Login」的用戶將會看到一個傳統的登錄屏幕。要做到這一點,我已經添加的方法的RegisterRoutes下面我Global.asax文件:

routes.MapRoute(
    "Login", 
    "{controller}/{action}", 
    new { controller = "Account", action = "Login", id = "" } 
); 

登錄操作執行,但是這是我感到困惑。您會看到,第一次登錄屏幕加載時,我希望只顯示一個用戶名/密碼字段。然後在發佈後,我希望表單能夠得到驗證和處理。爲了做到這一點,我創建了以下方法:

public ActionResult Login() 
{ 
    bool isFormValid = ValidateForm(); 
    if (isFormValid) 
    LoginUser(); 
    else 
    ShowErrors(); 

    return View(); 
} 

我的困惑在於登錄操作。最初沒有數據。但下一次,我想驗證數據。如何確定Action是否是回發?

謝謝!

回答

8

處理這個問題的最簡單方法是兩個操作:一個用於獲取,一個用於發佈。使用AcceptVerbs屬性來控制根據方法調用哪些。順便說一句,默認路由應該適用於這種情況,因爲當控制器和動作被提供時,它就像你期望的那樣被引導。我認爲這個場景也包含在項目模板中 - 您是使用模板還是空模板來設置項目?

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Login() 
{ 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Login(string userName, string password) 
{ 
} 
2

對於Post和Get,您需要兩種不同的方法。

[AcceptVerbs (HttpVerbs.Get] 
public ActionResult Login() 
{ 
    return View(); 
} 

[AcceptVerbs (HttpVerbs.Post] 
public ActionResult Login (FormCollection form) 
{ 
    if (AuthenticationSuccess()) 
     return RedirectToAction ("Account"); 
    else 
     return View(); 
} 

對於帖子的版本,你可以使用該模型約束機制:

public ActionResult Login (LoginModel loginModel) 

或者

public ActionResult Login (string LoginName, string Password)