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입니다.
보기에 모델이 없으므로 Umbraco에만 의존합니다. 아마 내가 여기에서 놓친 것입니다 ... 나는 그것을 나중에 시도하고 포스트를 업데이트 할 것입니다. –
보기에 모델을 제공하지 않으면 Umbraco는 현재 요청 컨텍스트를 사용하여 요청 된 현재 페이지를 확인하고 암시 적으로 해당 모델을보기에 제공합니다. 귀하의 경우, "돌아 가기보기 (사용자);" 예상 한 IPublishedContent 대신에 호환되지 않는 모델 (UserModel)로 뷰를 제공하기 때문에 문제가 될 수 있습니다 (뷰에서 상속한다고 선언했기 때문에). –