2013-05-10 2 views
0

C# 및 SQL Server 2005를 사용하여 ASP.Net MVC 3 응용 프로그램을 개발 중입니다. 코드 우선 접근 방식으로 Entity Framework를 사용하고 있습니다.빈 페이지가있는 부분 뷰 ASP MVC 3

나는 USER 테이블 (Login + password 포함)이있는 내베이스와 관련된 LOG ON (연결)을위한 인터페이스를 가지고 있습니다.

는 접속의보기이다 LogonPartial.acx (강하게 UserViewModel에서 입력 부분보기)

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcApplication2.ViewModels.UserViewModel>" %> 


<% 
    if (Request.IsAuthenticated) { 
%> 

     Welcome <strong><%: Page.User.Identity.Name %></strong>! 
     [ <%: Html.ActionLink("Log Off", "LogOff", "Account") %> ] 
<% 
    } 
    else { 
%> 
     [ <%: Html.ActionLink("Log On", "LogOn", "Account") %> ] 
<% 
    } 
%> 

때 접속 성공 : 내가 링크 '에 로그인'에만 있습니다. 접속이 실패하면 : 페이지가 비어

이 컨트롤러입니다 :

[ChildActionOnly] 
     public ActionResult LogedInUser() 
     { 
      var user = new UserViewModel(); 
      if (Request.IsAuthenticated) 
      { 
       user.Nom_User = User.Identity.Name; 
      } 
      return PartialView(user); 
     } 
private GammeContext db = new GammeContext(); 
     [AcceptVerbs(HttpVerbs.Post)] 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1054:UriParametersShouldNotBeStrings", 
      Justification = "Needs to take same parameter type as Controller.Redirect()")] 
     public ActionResult LogedInUser(string Matricule, string passWord, bool rememberMe, string returnUrl) 
     { 
      if (!ValidateLogOn(Matricule, passWord)) 
      { 
       return Connection(Matricule, passWord, returnUrl); 
      } 

      //FormsAuth.SignIn(Matricule, rememberMe); 

      if (!String.IsNullOrEmpty(returnUrl)) 
      { 
       return Redirect(returnUrl); 
      } 
      else 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
     } 

     public ActionResult Connection(string Matricule, string passWord, string returnUrl) 
     { 
      List<User> users = db.Users.ToList(); 
      ActionResult output = null; 

      if (users.Any()) 
      { 
       foreach (User u in users) 
       { 
        if ((u.Matricule == Matricule) && (u.passWord == passWord)) 
        { 
         output = View(); 
        } 
       } 
      } 
      else 
      { 
       output = Redirect(returnUrl); 
      } 

      return output; 
     } 
+0

그럼 첫 번째는 결코 심지어 UserViewModel을 사용하지 않는거야 - 나는 또한이 튜토리얼을 통해 이동 추천 할 것입니다. 두 번째로 나는 "연결 성공"(연결 성공이라고 가정)이 무엇을 의미하는지 확신 할 수 없지만, 그렇다면 올바른 사용자를 인증하지 않는 것입니다. –

+0

예, 로그인이 성공했습니다. 베이스에 존재하는 값을 넣으면 LogOn 링크가있는 페이지로 이동하기 때문에 인증이 필요하다고 생각합니다. 그러나 반대의 경우에는 빈 페이지로 이동합니다. – anouar

+0

이 논리는 귀하의 페이지가 아닌 컨트롤러에 있어야합니다. 계정 컨트롤러에서 코드는 어떻게 보이나요? –

답변

1

는 사용자를 인증하고 어디 표시되지 않는 이유는 무엇입니까? 이것을 시도하면 어떻게 되나요?

if (!ValidateLogOn(Matricule, passWord)) 
{  
    return Connection(Matricule, passWord, returnUrl); 
} 

// user is valid, authenticate 
FormsAuthentication.SetAuthCookie(Matricule, true); 
+0

답변 주셔서 감사합니다. 그러나 '암호'는 현재 컨텍스트에는 존재하지 않습니다.) ,,,, 나는 'passWord'로 모든 것을 시도합니다. 빨간색으로 된 모든 문장 bacame (오버로드 된 메소드) – anouar

+0

죄송합니다. , 두 번째 매개 변수는 부울 (지속성)입니다. 내 편집을 확인하십시오. –

+0

아, 문제가 없습니다. 올바르지 만 시도하지만 결과는 같습니다. 미안하지만, 내 대화를 좀 볼 수 있겠 니? – anouar

1

ActionLink를 올바르게 업데이트해야합니다.

이의 위의 예에서 형식을 취해야한다 :

<%: Html.ActionLink("Text on UI", "MethodNameInController", "ControllerName") %> 

는 당신은 위의 것을 수행하지 않은 - 당신이 컨트롤러 방법이없는 액션 연결되는 링크를 제공하고 있습니다. 당신의

http://www.asp.net/mvc/tutorials/getting-started-with-aspnet-mvc3/cs/intro-to-aspnet-mvc-3

+0

고마워! 나는이 tuto를 전에 읽었다 (누군가가 나에게이 tuto를 제안하는 것은 처음이 아니다) ,,, 나는 초보자 다, 나는 내가 ActionLink에 넣어야 만하는 것을 안다! 나는 그것을 바꾸는 것을 잊기 때문에 첫 번째 실수! 제발 ,,, 나는 문제가 거기에 있다고 생각하지 않는다. 왜냐하면 로그인 한 사용자의 이름도 나타나지 않기 때문이다 !! – anouar