2013-02-04 62 views
1

我正在學習一個新創建的默認簡單MVC4 web項目。控制的奇怪的過早驗證

在索引頁面中,我有一個鏈接供用戶用他的帳戶登錄該網站。之後,他將被重定向到一個表單,以輸入新名稱,新密碼。

我已準備好使用[Required]進行驗證。但是隨着重定向頁面完全加載,這些控件(用戶名和密碼)也被驗證(Field needs be filled in)。

這裏是POST的用戶後的代碼登錄他的帳戶

if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe)) 
{ 
    return RedirectToCreateUser(returnUrl); 
} 

// If we got this far, something failed, redisplay form 
ModelState.AddModelError("", "The user name or password provided is incorrect."); 
return View(model); 

這裏是方法RedirectToCreateUser

private ActionResult RedirectToCreateUser(string url) 
{ 
    if (Url.IsLocalUrl(url)) 
    { 
     return Redirect(url); 
    } 
    else 
    { 
     return RedirectToAction("CreateNewUser", "Account"); 
    } 
} 

最後CreateNewUser方法,它是HTTP GET

public ActionResult CreateNewUser(CreateNewUserModel model) 
{   
    return View(model); 
} 

另一個用於http POST的,我認爲還沒有被訪問過啊。

[HttpPost] 
public ActionResult CreateNewUser(CreateNewUserModel model, string url) 
{ 
    if (ModelState.IsValid) 
    { 
     // Attempt to register the user 
     try 
     { 
      WebSecurity.CreateUserAndAccount(model.UserName, model.Password, null, true); 
      WebSecurity.Login(model.UserName, model.Password); 
      return RedirectToAction("CreateUserSuccess", "Account"); 
     } 
     catch (MembershipCreateUserException e) 
     { 
      ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
     } 
    } 
    else 
    { 
    } 
    return View(model); 
} 

回答

0

你的問題是在這裏

終於這是HTTP GET

public ActionResult CreateNewUser(CreateNewUserModel model) 
{   
    return View(model); 
} 

的CreateNewUser方法,你可以不傳遞一個對象作爲獲取請求的參數。可能是簽名應該是

public ActionResult CreateNewUser() 
{  
    var model = new CreateNewUserModel();  
    return View(model); 
} 

或類似的東西

+0

真棒,現在的工作,感謝42 –

+0

高興幫助。 –

0

CreateNewUser動作射擊的[HttpPost],並試圖用後無效(空)的憑據。

你需要使用[HttpGet]添加的東西這樣的效果:

[HttpGet] 
public ActionResult CreateNewUser(CreateNewUserModel model) 
{   
    return View(model); 
} 
+0

謝謝,我想如果沒有'[httpx]'的方法應該是默認情況下,得到一個 –