【问题标题】:Umbraco 7.6.2: Cannot bind source type <my model> to model type Umbraco.Core.Models.IPublishedContentUmbraco 7.6.2:无法将源类型 <my model> 绑定到模型类型 Umbraco.Core.Models.IPublishedContent
【发布时间】:2017-09-24 03:11:54
【问题描述】:

我正在尝试使用 Umbraco 7.6.2 创建一个自定义登录表单,我为表单创建了一个局部视图、一个模型和一个基于 Umbraco.Web.Mvc.SurfaceController 的表面控制器。

毕竟我得到了错误:

无法将源类型“我的模型名称”绑定到模型类型 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 umbraco7


    【解决方案1】:

    在您的视图中,您期待的是IPublishedContent

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

    您没有提供该型号的代码。仔细检查此模型是否继承 RenderModel。你的 UserModel 部分没问题。

    【讨论】:

    • 我没有视图模型,它仅依赖于 Umbraco。这可能就是我在这里所缺少的......我会在今天晚些时候尝试并更新帖子。
    • 通过不为您的视图提供模型,Umbraco 将使用其当前请求上下文来确定当前请求的页面,并将该模型隐式提供给视图。在您的情况下,“return View(user);”行可能有问题,因为您为视图提供了不兼容的模型 (UserModel) 而不是预期的 IPublishedContent(因为您的视图声明它继承了它)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多