Как мне динамически построить список объектов в представлении CREATE? - PullRequest
0 голосов
/ 09 июля 2010

У меня есть модель Сотрудник , которая имеет Имя и Компания

Я хочу иметь возможность создавать несколько сотрудников в одном CREATE представлении. Я решил, что мне нужно создать IList<Employee> и сделать что-то вроде:

<%= Html.TextBoxFor(m => m[0].Name) %>
<%= Html.TextBoxFor(m => m[0].Company) %>

<%= Html.TextBoxFor(m => m[1].Name) %>
<%= Html.TextBoxFor(m => m[1].Company) %>

Если пользователь нажимает «Добавить другого сотрудника», я хочу, чтобы представление создало другую форму для нового сотрудника:

<%= Html.TextBoxFor(m => m[3].Name) %>
<%= Html.TextBoxFor(m => m[3].Company) %>

И продолжайте добавлять элементы формы (и увеличивать индекс массива, если они снова нажмут на него).

Имейте в виду, что мне нужно динамически строить форму и список в представлении создания. У меня еще нет заполненного списка сотрудников.

Как мне это сделать? Примеры кода были бы хороши, так как я очень плохо знаком с ASP.NET

1 Ответ

0 голосов
/ 09 июля 2010

Я ответил на аналогичный вопрос вчера
Программно добавить элементы управления в форму

Этот пример добавляет элементы к List(Of T) по нажатию кнопки, но вы можете добавлять элементы в контрольный список так, как вам нравится.

По сути, вы создаете класс с несколькими свойствами объекта, которые будут храниться в нем.

Затем вы добавляете предмет в коллекцию.

Imports System.Collections.Generic


Partial Class Default2
    Inherits System.Web.UI.Page

    ''# we need to create an array of our control list class
    Public Shared _empList As List(Of EmployeeList)



    ''# button click event
    Protected Sub AddStuff

        ''# create a new employee
        Dim emp As Employee = New Employee
        With emp
            .Name = "Joe"
            .Company = "Acme Welding"
        End With

        ''# add the employee to our custom array
        _empList.Add(New ControlList(emp))

    End Sub



    ''# this is our custom Employee List
    ''# the idea behind this is for us to store 
    Public Class EmployeeList
        Private _employee As Employee
        Public Property Employee As Employee
            Get
                Return _employee
            End Get
            Set(ByVal value As Employee)
                _employee = value
            End Set
        End Property

        Public Sub New(ByVal employee As Employee)
            _employee = employee
        End Sub

    End Class


End Class

Обратите внимание, что вам на самом деле не нужно использовать класс EmployeeList для этого, вы можете просто создать список уже существующего класса "Employee", созданного L2S / EF и т. Д.

Тогда вы передадите _empList представлению и будете использовать цикл foreach для его итерации.

EDIT:

Попробуйте что-нибудь в этом духе

public ActionResult ListEmployees()
{
    List<Employee> _empList = new List<Employee>();

    //'# create a new employee
    Employee emp = new Employee();
    {
        emp.Name = "Joe";
        emp.Company = "Acme Welding";
    }

    //'# add the employee to our custom array
    _empList.Add(new emp);

    return View(_empList);
}

Тогда, по вашему мнению, вы делаете что-то вроде этого

<%
foreach (var employee in Model)
{
    %>
    <p>Dude's Name: <%= Html.TextBoxFor(employee.Name) %></p>
    <p>Dude's Company: <%= Html.TextBoxFor(employee.Company) %></p>
    <%
}
%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...