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의 제약입니까? 그러나보기가 모델을 계정으로 허용하지만 편집기 템플리트는 모델이 아니라는 것이 이상합니다.
도움을 주시면 감사하겠습니다.
감사 에두아르도. MVC가 들리면 EditorForModel이 자동으로 목록을 반복하고 모델의 각 인스턴스에 대해 EditorTemplate을 적용합니다. 문제는 PetaPoco에서 오는 모델의 이름이라고 생각합니다. 어떻게 든 그것을 캐스팅 할 수 있기를 바랍니다. – lape
아니요, 자동으로 목록을 반복하지 않습니다. 목록에 대한 편집기 템플릿을 만들 수 있지만 목록을 반복해야합니다. –
[이 게시물을 참조하십시오 (http://stackoverflow.com/questions/5700558/how-can-i-bind-nested-viewmodels -from-view-to-controller-in-mvc3). 이것은 EditorTemplate을 통해 반복되는 중첩 List <>를 참조합니다. 여기에 IEnumerable <>이 있더라도 여기서는 할 수 없습니까? – lape