2017-09-24 9 views
0

Umbraco 7.6.2로 사용자 정의 로그인 양식을 만들려고합니다. 양식, 모델 및 표면 컨트롤러는 Umbraco.Web.Mvc.SurfaceController를 기반으로합니다.Umbraco 7.6.2 : 소스 유형 <my model>을 모델 유형 Umbraco.Core.Models.IPublishedContent에 바인딩 할 수 없습니다.

이 Umbraco.Core.Models.IPublishedContent 유형을 모델링 소스 유형 '내 모델의 이름을'바인딩 할 수 없습니다 :

나는 오류가 모든 후.

컨트롤러 :

public class UserSurfaceController : Umbraco.Web.Mvc.SurfaceController 
{ 
    // 
    // GET: /User/ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpGet] 
    public ActionResult Login() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult Login(Models.UserModel user) 
    { 
     if (ModelState.IsValid) 
     { 
      if (user.IsValid(user.UserName, user.Password)) 
      { 
       FormsAuthentication.SetAuthCookie(user.UserName, user.RememberMe); 
       return RedirectToAction("Index", "Home"); 
      } 
      else 
      { 
       ModelState.AddModelError("", "Login data is incorrect!"); 
      } 
     } 
     return View(user); 
    } 
    public ActionResult Logout() 
    { 
     FormsAuthentication.SignOut(); 
     return RedirectToAction("Index", "Home"); 
    } 
} 

모델 :

public class UserModel 
{ 
    [Required] 
    [Display(Name = "User name")] 
    public string UserName { get; set; } 

    [Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Password")] 
    public string Password { get; set; } 

    [Display(Name = "Remember on this computer")] 
    public bool RememberMe { get; set; } 

    /// <summary> 
    /// Checks if user with given password exists in the database 
    /// </summary> 
    /// <param name="_username">User name</param> 
    /// <param name="_password">User password</param> 
    /// <returns>True if user exist and password is correct</returns> 
    public bool IsValid(string _username, string _password) 
    { 
     if (_username == "username" && _password == "password") 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

} 

보기 :

@inherits Umbraco.Web.Mvc.UmbracoViewPage<IPublishedContent> 
@{ 
    Layout = "Master.cshtml"; 
} 
@Html.Partial("User", new namespace.UserModel()); 

부분보기 :

@model namespace.UserModel 

<div role="content"> 
<div class="container"> 
    <div class="row"> 
     <div class="col"> 
      @using (Html.BeginUmbracoForm<namespace.Controllers.UserSurfaceController>("Login", "UserSurface")) 
      { 
       <div> 
        <fieldset> 
         <legend>Login</legend> 
         <div class="editor-label"> 
          @Html.LabelFor(u => u.UserName) 
         </div> 
         <div class="editor-field"> 
          @Html.TextBoxFor(u => u.UserName) 
          @Html.ValidationMessageFor(u => u.UserName) 
         </div> 
         <div class="editor-label"> 
          @Html.LabelFor(u => u.Password) 
         </div> 
         <div class="editor-field"> 
          @Html.PasswordFor(u => u.Password) 
          @Html.ValidationMessageFor(u => u.Password) 
         </div> 
         <div class="editor-label"> 
          @Html.CheckBoxFor(u => u.RememberMe) 
          @Html.LabelFor(u => u.RememberMe) 
         </div> 
         <input type="submit" value="Log In" /> 
        </fieldset> 
       </div> 
      } 
      </div> 
    </div> 
</div> 
</div> 

여기서 내가 뭘 잘못하고 있을까요? 이것을 고려해 볼 때 Umbraco 7.6.2입니다.

답변

1

보기에는 IPublishedContent이 필요합니다.

@inherits Umbraco.Web.Mvc.UmbracoViewPage<IPublishedContent> 

해당 모델의 코드를 제공하지 않았습니다. 이 모델이 RenderModel을 (를) 상속 받았다면 다시 확인하십시오. 부분적인 부분은 UserModel입니다.

+0

보기에 모델이 없으므로 Umbraco에만 의존합니다. 아마 내가 여기에서 놓친 것입니다 ... 나는 그것을 나중에 시도하고 포스트를 업데이트 할 것입니다. –

+1

보기에 모델을 제공하지 않으면 Umbraco는 현재 요청 컨텍스트를 사용하여 요청 된 현재 페이지를 확인하고 암시 적으로 해당 모델을보기에 제공합니다. 귀하의 경우, "돌아 가기보기 (사용자);" 예상 한 IPublishedContent 대신에 호환되지 않는 모델 (UserModel)로 뷰를 제공하기 때문에 문제가 될 수 있습니다 (뷰에서 상속한다고 선언했기 때문에). –