2017-09-24 74 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將使用其當前請求上下文來確定當前請求的頁面,並將隱式地將該模型提供給View。在你的情況下,行「返回查看(用戶);」可能是有問題的,因爲你提供了一個不兼容的模型(UserModel)而不是預期的IPublishedContent(因爲你的視圖聲明它繼承了它)。 –