Динамические элементы управления в строго типизированном представлении (ASP.NET MVC)

Скажем, у меня есть следующее:

public class Person{
    public int ID {get; set;}
    public string Name {get; set;}
}

public class Phone{
    public int ID {get; set;}
    public string PhoneNumber {get; set;}
}

public Class AddEditViewModel{
    public Person MyPerson{get; set;}
    public List MyPhones{get; set;}
}

I want to create a create/edit action in my MVC app - the page inherits from

ViewPage<AddEditViewModel>
and i want to be able to dynamically add the fields for the end-user to add a "phone" (anywhere between 0 - 5 phones). How would i pass that data to the Create/Edit method in my controller. I have tried the following, but nothing seems to get the phone numbers.

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(AddEditViewModel data){} 

с этим я могу вызвать data.MyPerson.Name и получить значение, но data.MyPhones == null

Мой вопрос: как настроить представление и контроллер, чтобы иметь возможность отправлять одну страницу добавления / редактирования, которая создает объект одного человека с несколькими объектами телефона с учетом приведенного выше кода?


person Robin    schedule 17.06.2009    source источник


Ответы (3)


Если я правильно понял ваш вопрос, вы спрашиваете о привязке к списку номеров телефонов. У Фила Хаака есть сообщение о том, как создать модель привязка к списку

Надеюсь это поможет.

person Joel Cunningham    schedule 17.06.2009
comment
Вы прекрасно поняли мой вопрос - теперь я могу поручиться за то, чтобы работать со списками и в пользовательских объектах! - person Robin; 17.06.2009

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

person Anshuman Khandelwal    schedule 06.03.2015

Если вы знаете, что будет 5 телефонных номеров, вы можете попробовать этот пример, это добавит 5 текстовых полей, и при отправке вы получите значения в модели просмотра.

public class Book
{
    public string Title { get; set; }
    public string Author { get; set; }
    public DateTime DatePublished { get; set; }

}

public class BookViewModel
{
    public List<Book> Books { get; set; }

}

Вид

 @model MVCLearning.Models.BookViewModel

@{
  using (Html.BeginForm("Submit", "Dynamic"))
   {

    if (Model.Count > 0 && Model != null)
    {
        for (int i = 0; i < 5; i++)
        {
            <div id="div_@i">
                @Html.TextBoxFor(m => Model.Books[i].Title)
            </div>
        }
        <input type="submit" value="Submit" />

    }

}
} 
person Dave    schedule 10.07.2016