2009-09-22 5 views
1

MVC 프로젝트를 시작했고 나를 위해 AccountController 클래스를 만들었습니다. 그래서 현재 사이트에 로그인하려면 localhost : 2500 \ Account.mvc \ LogOn을 입력하십시오.MVC 다른 컨트롤러 호출 액션

색인보기에서 HomeController에 로그인을하고 싶습니다. 그래서 기본적으로 당신이 사이트의 루트에 가서 인증되지 않으면 다른 곳으로 가기 위해 로그인해야합니다.

그래서 내가 한 것은 내 인덱스보기에 양식을 추가하고 내 LogOn 작업을 호출하는 계정보기에 게시하려고했습니다.

나는 BeginForm 메서드를 호출하여 액션과 해당 뷰 (LogOn, Account)를 전달했다. 버튼을 클릭하면 계정보기에 게시되지 않으므로 LogOn 작업이 실행되지 않습니다. 대신, 인덱스 동작을 다시 호출하는 홈 뷰에 게시됩니다. 그래서 그것은 나를 위해 정말로 아무것도하지 않는다. .. 하하.

내가 잘못하고 있는지 확실하지 않습니다. 아래는 Home/Index.aspx의 원시 형식 코드이며, 렌더링 된 후에는 로그온 버튼을 누르기 전에 소스를 보여줄 것입니다. Home.mvc/인덱스의

<% 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> 
     <% } %> 

소스보기 :

는 여기에 홈/Index.aspx에서 내 코드의 내 로그온 행동에 브레이크 포인트를 설정하고 가져 결코

<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 소스의 작업이 올바르게 설정되어있는 것처럼 보입니다. 올바르게 게시되지 않는 이유를 모르겠습니다. 나는 옳은 일을하지 않을거야. 아이디어가 있으면 알려주십시오. 감사! 계정보기

로그온 조치 :

[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

조치를 시작했을 때 슬래시를 사용하지 않았습니까? –

+0

@mrinject MVC가 슬래시를 사용하여 경로를 렌더링 한 경우 반드시 올바른 것으로 기대하십니까? –

+0

BegamForm() with params를 사용하고 있기 때문에 Yea MVC가이 HTML을 렌더링했습니다 ... – Gabe

답변

2

당신은 /Account.mvc/LogOn가 유효한 경로인지 확인 할 수 있나요? 확인

것들 :

  • 는 경로가 유효합니까? [ActionVerbs (HttpVerbs.Get)]

편집 : , 코드를 보면 사실을 무시하는 등 -

  • 는 로그온 작업은 POST 요청을 방지 그것에 ActionVerb이 있습니까 저 브레이크 포인트. returnUrl을 전달하지 않으므로 홈 페이지로 리디렉션됩니다. 성공했을 때 홈 페이지로 다시 보냅니다.

    마스터 페이지에 넣으십시오. 그것은 무엇을 반환합니까?

    <%=Request.IsAuthenticated %> 
    

    편집 2 :

    은 분명히이 false를 반환합니다.

    좋아요 ... 컨트롤러가 괜찮아요.보기가 괜찮아 보이고 올바른 URL을 렌더링 중입니다 ... ASP.NET MVC가 설치되어 있고 GAC에 있다고 가정합니다. LogOn과 같은 다른 URL로 직접 이동하십시오. 그리고 경로에서 '.mvc'가 주어지면 Windows XP에서 실행중인 것처럼 보입니다.

    경로가 어떻게 생겼습니까? 그들에게 어떤 변화를 주었습니까?

  • +0

    예, 유효한 경로입니다. 나는 분명히 내 브라우저에서 직접 갈 수 있습니다 ... localhost : 2500 \ Account.mvc \ LogOn – Gabe

    +0

    그래서 GET 요청을 받아들입니까? POST는 어떻습니까? 거기에 ActionVerbs가 있습니까? –

    +0

    예 LogOn 작업에는 ActionVerb가 있습니다. 위의 조치를 참조 용으로 게시하겠습니다. – Gabe

    관련 문제