2011-12-08 103 views
0

使用MVC3剃鬚刀,我想在firstlogin上將用戶重定向到ClubController。我正在使用默認的成員資格提供程序和配置文件提供程序,我在註冊過程中將布爾isNewUser設置爲true。代碼如下,但似乎邏輯不正確。我是新手,需要幫助。第一次登錄時MVC3重定向

[HttpPost] 
    public ActionResult LogOn(LogOnModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      if (Membership.ValidateUser(model.UserName, model.Password)) 
      { 
       FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
       var userProfile = ProfileBase.Create(model.UserName); 
       var FirstTime = userProfile.GetPropertyValue("isNewUser"); 
       if (FirstTime == true) 
       { 
        return RedirectToAction("Create", "Club"); 
       } 
       else 
       { 

        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
         && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
        { 
         return Redirect(returnUrl); 
        } 
        else 
        { 

         return RedirectToAction("Index", "Home"); 
        } 

        { 
         ModelState.AddModelError("", "The user name or password provided is incorrect."); 
        } 

      // If we got this far, something failed, redisplay form 
      return View(model); 
     } 

我按照步驟How to track first login of user in MVC3?。任何幫助將是非常讚賞

+0

你在配置中設置爲自定義屬性的默認值「真」'<添加名稱=」 isNewUser「defaultValue =」True「type =」System.Boolean「/>'你也應該在重定向到ClubController之前將該值設置爲false –

+0

你的'ProfileBase.Create'方法裏有什麼? – eth0

+0

是的,我已經完成了配置位如下' <添加名稱= 「AspNetSqlProfileProvider」 類型= 「System.Web.Profile.SqlProfileProvider」 的connectionStringName = 「ApplicationServices」 的applicationName = 「/」/> <添加名稱=「isNewUser」默認值=「假」 TYPE =「System.Boolean」 /> '我覺得這個問題是安排的,如果如上述,如果有人可以檢查我 – Diin

回答

0

最後,這是我設法解決問題的方法。我所做的登錄模式如下

[HttpPost] 
public ActionResult LogOn(LogOnModel model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
    if (Membership.ValidateUser(model.UserName, model.Password)) 
    { 
     FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
     var profile = ProfileBase.Create(model.UserName); 
     var FirstTime = profile.GetPropertyValue("isNewUser"); 
     var chk=FirstTime; 
     if (chk.Equals(true)) 
     return RedirectToAction("Create","Club"); 
     else 
     if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/") 
      && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\")) 
      return Redirect(returnUrl); 
     else 
      return RedirectToAction("Index", "Home"); 
    } 
    else 
     ModelState.AddModelError("", "The user name or password provided is incorrect."); 
    } 

,並設置配置文件如下

<profile> 
    <providers> 
    <clear/> 
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" /> 
    </providers> 
    <properties> 
    <add name="isNewUser" type="System.Boolean"/> 
    </properties> 
</profile> 
0

德出了{和}前後模型狀態行

+0

謝謝@ Ryand.Johnson我設法解決了這個問題,但無論FirstTime這一行的值是什麼 'return RedirectToAction(「Index」,「Home」);'在模型狀態行執行之前 – Diin

+0

@Krishna Chytanya在俱樂部完全填滿之後,我想把它設置爲假。但是現在,即使當我創建一個新用戶時,我期望isNewUser在默認配置文件提供程序中註冊爲true,但這不起作用 – Diin

+0

我是否必須在帳戶控制器的註冊部分添加設置? – Diin

0

你肯定FirstTime是一個布爾值,而不是一個字符串後?您可以更改您的if語句以確保

if(Convert.ToBoolean(FirstTime)).... 
+0

感謝您的建議。我按照你的建議完成了,但是當我通過設置斷點進行跟蹤時FirstTime對於任何用戶都是True,但即使它不重定向 – Diin