2009-06-17 4 views
1

Скажем у меня есть следующие:Динамические элементы управления в сильно типизированных (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;} 
} 

Я хочу создать создать/редактировать действие в моем приложении MVC - страница наследует от

ViewPage<AddEditViewModel>
и я хотите динамически добавлять поля для конечного пользователя, чтобы добавить «телефон» (где-то между 0 - 5 телефонами). Как передать эти данные методу Create/Edit в моем контроллере. Я пробовал следующее, но ничего не получается, чтобы получить номера телефонов.

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

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

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

ответ

1

Если я правильно понял ваш вопрос, вы спрашиваете о привязке к списку телефонных номеров. Фил Хаак имеет должность, как сделать model binding to a list

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

+0

Вы прекрасно поняли мой вопрос - теперь я могу ручаться за это, работая со списками в пользовательских объектах! – Rob

0

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

0

Если вы знаете, что будет 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="[email protected]"> 
       @Html.TextBoxFor(m => Model.Books[i].Title) 
      </div> 
     } 
     <input type="submit" value="Submit" /> 

    } 

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