2013-07-03 2 views
3

Я новичок в ASP.NET MVC и нуждаюсь в некоторой помощи. Мне нужно создать форму, где форма динамически создается. Например, допустим, у меня есть модель с именем Person. У человека есть имя и фамилия. В форме я хочу разрешить пользователю вводить имя и фамилию человека. Я знаю, как это сделать, но то, что я не знаю, как это сделать, позволяет пользователю добавлять несколько человек и делать это в виде одной формы.Генерация динамической формы ASP.NET MVC4

При первоначальной загрузке страницы (просмотра) по умолчанию будет отображаться два пустых текстовых поля (для имени и фамилии). У меня также была бы кнопка добавления, которая позволила бы пользователю добавить еще одну строку в форму и показать те же 2 текстовых поля для 2-го человека. Теперь, если пользователь отправит его, у него будет 2 текстовых поля для имени и 2 для фамилии.

Я не знаю, есть ли способ сделать это без обратной связи. Или отправить мой единственный вариант?

EDIT: Забыл упоминать, что использую двигатель Razor.

Благодаря

+1

Посмотрите на частичные виды, вам нужно будет создать модель ienumerable и частичный вид, который позволит пользователю добавить другого человека. Существует много информации о SO и Google, чтобы помочь вам с примерами кода. –

+0

@NicholasKing, если у вас есть ссылки, я был бы благодарен. В то же время я сделаю поиск ... – JMS10

+1

взгляните на это. Я нашел его очень полезным http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/ –

ответ

3

Нет необходимости в нескольких POST. Вы хотите, чтобы ваша форма отправила вам массив Person. Действие будет чем-то вроде

[HttpPost] 
public ActionResult AddPeople(Person[] people){ ... } 

Для этого вы должны перечислить поля ввода в своем представлении. Они должны быть проиндексированы, начиная с 0 и увеличивающиеся соответственно, как:

@using(Html.BeginForm("AddPeople","TheController", FormMethod.Post)) 
{ 
    <input type="text" name="people[0].FirstName" /> 
    <input type="text" name="people[0].LastName" /> 
    ... 
    <input type="text" name="people[1].FirstName" /> 
    <input type="text" name="people[1].LastName" /> 
    ... 
    <input type="text" name="people[n].FirstName" /> 
    <input type="text" name="people[n].LastName" /> 
} 

Вы должны добавить новые поля с помощью JavaScript, с помощью простого манипулирования DOM. Не забудьте сохранить индексы в порядке.

1

Фил Хаак wrote an article на довольно много, что вы хотите сделать. Чтобы он был динамическим (это означает, что в списке может быть от 1 до многих людей), вам нужно будет сделать некоторые манипуляции с JavaScript, присоединив событие click к кнопке добавления, чтобы скопировать новую строку полей ввода. Сначала я предлагаю сначала прочитать эту статью, чтобы понять, как вам нужно структурировать поля ввода, чтобы при отправке сообщения список заполнялся.

3

У Стивена Сандерсона в его блоге есть очень хорошая статья об этом ... он не полагается на числовые индексы для каждого человека, чтобы избежать «дыр» при удалении одного из них посередине.

Смотрите статью здесь: http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

Затем вам потребуется подтверждение: http://blog.stevensanderson.com/2010/01/28/validating-a-variable-length-list-aspnet-mvc-2-style/

Я использую этот код в MVC 3 и 4 ... и он работает как шарм.

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