asp.net mvc как я могу передать коллекцию контроллеру - PullRequest
0 голосов
/ 26 апреля 2011

Вопрос довольно интересный: Как я могу передать коллекцию в контроллер, когда у меня есть типизированное представление для создания шаблона. Это моя ViewModel:

 public class AgencyOfficiesItem
    {    
        public string Address { get; set; }
        public List<PhoneItem> Phones { get; set; }
        public List<SelectListItem> CitiesList { get; set; }
    }

 public class PhoneItem {
        public string Phone { get; set; }
        public string PhoneOperator { get; set; } 
    } 

Итак, я хочу создать представление для создания объекта телефона, в котором есть поля оператора телефона и номера телефона. Но интересно то, что я хочу получить коллекцию из телефонных объектов и передать их контроллеру. Есть идеи?

1 Ответ

2 голосов
/ 26 апреля 2011

Если вы просто продолжите и сделаете что-то подобное на ваш взгляд:

@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, я нахожу его более интуитивным, чем его предшественники. Не говоря уже о «многословных».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...