【问题标题】:Invalid model when using petapoco and editortemplates使用 petapoco 和编辑器模板时模型无效
【发布时间】:2015-01-17 15:14:27
【问题描述】:

我正在使用 Petapoco(在 Umbraco 中)从数据库中获取 IEnumerable 并将其传递给视图。下面的代码缩写以便于概述
型号:

public class Account  
{  
    [Column("accountId")]
    [PrimaryKeyColumn(AutoIncrement = true)]
    [HiddenInput(DisplayValue = false)]
    public int accountId { get; set; }

    [Column("accountCode")]
    [Required(ErrorMessage = "Enter the account code (max 20 chars)")]
    [Display(Name = "Account code")]
    public string accountCode { get; set; }
}

控制器:

   var db = ApplicationContext.DatabaseContext.Database;
   var all = db.Query<Account>("SELECT * FROM account");
   return PartialView("_accountList", all);

局部视图:

@model IEnumerable<App.Models.AccountListViewModel>

//notice I manually set the template name because MVC does not see this as an  
//'Account' model but a 'Umbraco.Core.Persistence.Database+<Query>d__7`1[App.Models.Account]'
//model
@Html.EditorForModel("Account") 

编辑器模板:

@model App.Models.Account

<div>
   <p>account code<br/>
   @Html.TextBoxFor(x => x.accountCode, new { @class = "form-control input-sm" })
   </p>
   @Html.HiddenFor(a => a.accountId)
</div>

在上面运行时出现以下错误:

System.InvalidOperationException:模型项传入 字典是类型 'Umbraco.Core.Persistence.Database+d__7`1[App.Models.Account]', 但是这本字典需要一个类型的模型项 'App.Models.Account'。

如何获取编辑器模板以查看此帐户模型?还是 PetaPoco 中使用编辑器模板的限制? 然而奇怪的是视图接受模型作为帐户,而编辑器模板不接受。

感谢任何帮助!

【问题讨论】:

    标签: asp.net-mvc petapoco umbraco7 editortemplates


    【解决方案1】:

    在您的部分视图中,您的模型是一个 IEnumerable,但稍后在您的编辑器模板中,您只有一个对象。

    应该是:

    @model IEnumerable<App.Models.AccountListViewModel>
    
    @foreach (var item in Model ) {
       Html.EditorFor(item) 
    }
    

    【讨论】:

    • 谢谢爱德华多。当我听到 MVC 时,EditorForModel 将自动迭代列表并为模型中的每个实例应用 EditorTemplate,对吗?我认为问题在于来自 PetaPoco 的模型的名称。我希望能够以某种方式投射它
    • 不,它不会自动迭代列表。你可以为列表做一个编辑器模板,但是你必须在那里迭代列表
    • 请参阅this post。这指的是通过 EditorTemplate 迭代的嵌套 List。即使我有一个 IEnumerable,我不能在这里这样做吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2011-12-07
    • 2011-10-12
    • 1970-01-01
    • 2013-05-05
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多