2013-10-14 2 views
0

У меня есть следующие IEnumerableКак использовать HTML-помощники в IEnumerable?

public class AuditDetailsViewModel 
    { 
    public string CustAddress { get; set; } 
    public IEnumerable<DefectDetailsViewModel> DefectDetails { get; set; } 

    } 

    public class DefectDetailsViewModel 
    { 
     public string Description { get; set; } 
     public string Comments { get; set; } 
    } 

На мой взгляд бритвой, как я могу перечислить по этому поводу с помощью помощников Html? Если бы это был список, который я мог бы сделать что-то вроде следующего

@model AIS.Web.Areas.Inspector.ViewModel.AuditDetailsViewModel 
@for (int i = 0; i < Model.DefectDetails.Count(); i++) 
{ 
    @Html.TextBoxFor(m => m.DefectDetails[i].Description) 
} 

, но как я могу это сделать, если ViewModel является IEnumerable?

ответ

0

Вы должны будете использовать ToList()

var items = Model.DefectDetails.ToList(); 

    @for (int i = 0; i < items.Count; i++) 
    { 
     @Html.TextBoxFor(m => m.Description[i].ToBeAudited) 
    } 

EDIT:

Вы не можете применять индексацию к IEnumerable, что это правда, и именно поэтому вы должны преобразовать его в список с помощью ToList() ,

Если вы используете цикл for..each, тогда, когда вы отправляете обратно на контроллер, содержимое в текстовых файлах не будет передано. Вы должны использовать цикл for ... с индексом, иначе связующее устройство MVC не сможет правильно привязать данные.

В коде вы не вызываете ToList() перед итерацией по коллекции, поэтому вы получаете ошибку, которую он не может применить индексирование к перечислимому.

+0

Я думаю, что не нужен больше 'Count()' вместо 'Count' собственности, потому что вы преобразовать в Generic список. –

+0

Я обновил свой код ... это, похоже, не работает .. после следующего @ Html.TextBoxFor (m => m.Description [i] ... когда я нажимаю точку, ничего не появляется .. это говорит, что я не могу примените индексирование к ienumerable ... Похоже, мне может понадобиться обновить viewmodel .. просто сказать List вместо ienumerable ... странный – user2206329

1

Я использую Еогеасп когда цикл через IEnumerable

foreach(var temp in Model.DefectDetails){ 
    @Html.TextBoxFor(x => temp.Description) 
} 

Надеется, что это помогает

+0

делает это для обратной передачи? мог ли MVC моделировать привязку? – user2206329

+0

В моем опыте каждый раз вы используете хелпер (кроме displayfor). MVC способен моделировать привязку. –

+0

Просто прочитайте Jason Evans и ответьте на него. Это может помочь http://stackoverflow.com/questions/8894442/mvc-razor-view-nested-foreachs -модель –

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