2009-09-22 80 views
1

我已經啓動了一個MVC項目,併爲我創建了AccountController類。 所以要登錄到我目前的網站,我將不得不去localhost:2500 \ Account.mvc \ LogOnMVC調用另一個控制器動作

我想在我的HomeController在索引視圖進行登錄。所以基本上如果你去我的網站的根,如果不認證,你將不得不登錄去其他地方。

所以我做的是將表單添加到我的索引視圖中,並試圖將它發佈到我的 調用LogOn操作的帳戶視圖。

我已經調用了BeginForm方法,將它傳遞給我的動作和相應的視圖(LogOn,Account)。當我點擊按鈕時,它不會發布到帳戶視圖,因此不執行LogOn操作。相反,它只是發佈到主視圖再次調用索引操作。所以它對我來說真的沒有用處......哈哈。

不知道我在做什麼錯。下面是我的Home/Index.aspx中的原始表單代碼,然後我將在點擊登錄按鈕之前呈現它的呈現源代碼。

下面是從首頁/的Index.aspx我的代碼:

<% using (Html.BeginForm("LogOn", "Account")) { %> 
      <div> 
       <fieldset> 
        <legend>Account Information</legend> 
        <p> 
         <label for="username">Username:</label> 
         <%= Html.TextBox("username") %> 
         <%= Html.ValidationMessage("username") %> 
        </p> 
        <p> 
         <label for="password">Password:</label> 
         <%= Html.Password("password") %> 
         <%= Html.ValidationMessage("password") %> 
        </p> 
        <p> 
         <%= Html.CheckBox("rememberMe") %> <label class="inline" for="rememberMe">Remember me?</label> 
        </p> 
        <p> 
         <input type="submit" value="Log On" /> 
        </p> 
       </fieldset> 
      </div> 
     <% } %> 

查看Home.mvc /索引來源:

<form action="/Account.mvc/LogOn" method="post"> 
    <div> 
     <fieldset> 
      <legend>Account Information</legend> 
      <p> 
       <label for="username">Username:</label> 
       <input id="username" name="username" type="text" value="" /> 

      </p> 

      <p> 
       <label for="password">Password:</label> 
       <input id="password" name="password" type="password" /> 

      </p> 
      <p> 
       <input id="rememberMe" name="rememberMe" type="checkbox" value="true" /><input name="rememberMe" type="hidden" value="false" /> <label class="inline" for="rememberMe">Remember me?</label> 
      </p> 

      <p> 
       <input type="submit" value="Log On" /> 
      </p> 
     </fieldset> 
    </div> 
</form> 

我在了登錄操作設置一個斷點,它從來沒有得到點擊,所以它也不是登錄錯誤。

它看起來像在html源代碼中的操作設置正確,我只是不明白爲什麼它不正確發佈。我沒有做正確的事。如果您有任何想法,請告訴我。謝謝!

LogOn支持行動的帳戶查看:

[AcceptVerbs(HttpVerbs.Post)] 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", 
      Justification = "Needs to take same parameter type as Controller.Redirect()")] 
     public virtual ActionResult LogOn(string userName, string password, bool rememberMe, string returnUrl) 
     { 

      if (!ValidateLogOn(userName, password)) 
      { 
       return View(); 
      } 

      FormsAuth.SignIn(userName, rememberMe); 
      if (!String.IsNullOrEmpty(returnUrl)) 
      { 
       return Redirect(returnUrl); 
      } 
      else 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
     } 
+0

您是否在嘗試開始時不嘗試使用斜線? – 2009-09-22 19:20:49

+0

@mrinject如果MVC已經使用斜線渲染了路線,那麼你期望它是正確的嗎? – 2009-09-22 19:25:25

+0

是的,MVC已經在這裏呈現了這個html,因爲我使用了帶參數的BeginForm()... – Gabe 2009-09-22 19:26:15

回答

2

你能否證實/Account.mvc/LogOn是一個有效的途徑?

檢查事項:

  • 是路由是否有效?

  • 是否登錄動作有ActionVerb上,防止post請求 - 如: [ActionVerbs(HttpVerbs.Get)

編輯: 看你的代碼,忽略了一個事實那個斷點。被重定向到主頁,因爲你沒有通過returnUrl,當它成功時它不會僅僅發回你的主頁嗎?

把它放在你的母版頁中。它返回什麼?

<%=Request.IsAuthenticated %> 

編輯2:

顯然,這將返回false。

好吧...所以控制器是好的,視圖看起來不錯,並呈現正確的網址...我假設ASP.NET MVC已安裝並且位於GAC中,因爲您還可以瀏覽直接到其他網址如LogOn。看起來你正在Windows XP上運行它,因爲路由中有'.mvc'。

你的路線是什麼樣的?你有沒有對它們做過任何修改?

+0

是的,這是一條有效的路線。我可以直接在我的瀏覽器中直接訪問它... localhost:2500 \ Account.mvc \ LogOn – Gabe 2009-09-22 19:25:20

+0

那麼它也接受GET請求?那麼POST呢?有沒有ActionVerbs? – 2009-09-22 19:27:47

+0

是LogOn操作具有ActionVerb。我將在上面發佈該操作以供參考。 – Gabe 2009-09-22 19:28:45

相關問題