2014-11-19 3 views
0

Я использую Petapoco (в Umbraco) для извлечения IEnumerable из БД и передачи его в представление. Код ниже сокращенная для легкого обзора
Модель:Недопустимая модель при использовании petapoco и editortemplates

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: The model item passed into the dictionary is of type 'Umbraco.Core.Persistence.Database+d__7`1[App.Models.Account]', but this dictionary requires a model item of type 'App.Models.Account'.

Как я могу получить шаблон редактора, чтобы увидеть эту модель аккаунт? Или это ограничение в PetaPoco для использования шаблонов редактора? Однако странно, что представление принимает модель как учетную запись, но шаблон редактора не работает.

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

ответ

0

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

Должно быть:

@model IEnumerable<App.Models.AccountListViewModel> 

@foreach (var item in Model) { 
    Html.EditorFor(item) 
} 
+0

Благодаря Эдуардо. Поскольку я слышу MVC, EditorForModel автоматически перебирает список и применяет EditorTemplate для каждого экземпляра в модели, правильно? Я думаю, что проблема заключается в названии модели, исходящей от PetaPoco. Я надеюсь, что смогу сделать это как-то – lape

+0

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

+0

Пожалуйста, смотрите [это сообщение] (http://stackoverflow.com/questions/5700558/how-can-i-bind-nested-viewmodels -из-просмотр к контроллеру-в-mvc3). Это относится к вложенному списку <>, который повторяется с помощью EditorTemplate. Не могу ли я сделать это здесь, хотя у меня есть IEnumerable <>? – lape

Смежные вопросы