2014-11-19 6 views
0

Petapoco (Umbraco에서)를 사용하여 DB에서 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 -from-view-to-controller-in-mvc3). 이것은 EditorTemplate을 통해 반복되는 중첩 List <>를 참조합니다. 여기에 IEnumerable <>이 있더라도 여기서는 할 수 없습니까? – lape