2010-05-03 4 views
0

Я пытаюсь выяснить, что было бы лучшим способом связать первый элемент ISet (Iesi.Collection) в качестве первого элемента.Bind ISet в ASP.NET MVC2

Так в основном я использовать только какой-то коллекции, которая имеет индексатор (и ISet не делает), то я могу писать код, как это (который работает отлично):

<%: Html.EditorFor(x => x.Company.PrimaryUsers[0].Email) %> 

Но, как У ISet нет индексатора, я не могу его использовать.

Итак, как я могу связать первый элемент ISet в MVC2?

Thanks,
Dmitriy.

ответ

1

К сожалению, эти сильно типизированные помощники работают только с свойствами индексатора для коллекций. Они действительно искали бы открытие и закрытие [] скобки в синтаксисе.

Возможным обходным путем было бы добавить еще одно свойство в вашем классе модели вида, которое будет иметь тип IList и будет заселено от первоначальной собственности. В getter вы просто вернете новый список из исходного свойства, а в установщике вы восстановите исходный набор, поскольку у него нет понятия порядка.

+0

Звучит неплохо? Я не хочу модифицировать модель просто ради или сделать ее в представлении. Определенно лучшее решение должно существовать. –

0

Вы можете осуществить это с помощью следующих действий:

<% 
    int i = 0; 
    foreach (var element in Model.Company.PrimaryUsers) { 
    string htmlFieldName = String.Format("Company.PrimaryUsers[{0}]", i); 
    %><%: Html.EditorFor(_ => element, null /* templateName */, htmlFieldName) %><% 
    i++; 
    } 
%> 

Эта специфическая перегрузка EditorFor() говорит: «Я собираюсь передать вам модель, но использовать строку htmlFieldName для модели, а не пытаться вывести его из выражения ». В этом случае вы должны следить за i.

+0

Это не свяжет опубликованные данные с моделью. –