Неверная модель при использовании petapoco и editortemplates

Я использую 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 есть ограничение на использование шаблонов редактора? Тем не менее, странно, что представление принимает модель в качестве учетной записи, а шаблон редактора - нет.

Любая помощь приветствуется!

1 ответ

В вашем частичном представлении ваша модель является IEnumerable, но позже в вашем шаблоне редактора у вас есть только один объект.

Должно быть:

@model IEnumerable<App.Models.AccountListViewModel>

@foreach (var item in Model ) {
   Html.EditorFor(item) 
}
Другие вопросы по тегам