Если вы просто продолжите и сделаете что-то подобное на ваш взгляд:
@using(Html.BeginForm... // I'm doing this from memory, check the arguments
{
for( int idx = 0; idx < Model.Phones.Count; idx++ )
{
@Html.EditorFor(m => m.Model.Phones[idx].Phone)
@Html.EditorFor(m => m.Model.Phones[idx].PhoneOperator)
}
// similar for cities, other model properties, etc.
}
и объявите ваш метод записи следующим образом
[HttpPost]
public ActionResult OnPostBack( <modeltype> arg )
{
if( ModelState.IsValid )
{
// action logic, etc.
тогда все должно быть хорошо. MVC определит результирующие текстовые поля таким образом, что он сможет связать их обратно с моделью при обратной передаче. Я полагаю, что он объявляет атрибут name в текстовом поле, например, Phones_1_Phone. Вы можете проверить, просмотрев сгенерированный HTML в вашем браузере.
Кстати, есть и другие способы заставить это работать. Вы можете использовать ключи, используя Dictionary <>, а не List <>, и, я полагаю, разреженные массивы. И, конечно, вы захотите сделать что-то большее, чем просто сгенерировать кучу текстовых полей на своей странице - некоторые ярлыки были бы хороши:).
Я обнаружил, что отличным учебным пособием по этому и многому другому является Pro ASP.NET MVC Framework Framework Стивена Сандерсона от Apress. Я начал с того, что ничего не знал о MVC всего пару месяцев назад, и теперь я вполне доволен им (хотя пока не эксперт).
Упс, забыл упомянуть кое-что важное: в моем примере используется MVC3 и его движок Razor View. Вам нужно будет перевести его в синтаксис MVC2, если вы не используете MVC3. Но вы должны взглянуть на MVC3, я нахожу его более интуитивным, чем его предшественники. Не говоря уже о «многословных».