2010-07-09 3 views
0

У меня есть Employee модели, которая имеет Название и КомпанииКак динамически строить список объектов в представлении CREATE?

Я хочу, чтобы иметь возможность построить несколько сотрудников в одном 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

ответ

0

вчера
Programmatically add controls to form

Этот пример добавляет элементы в 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, чтобы сделать это, вы могли бы просто создать список уже существующего «Сотрудник» класс, который построен 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> 
    <% 
} 
%> 
+0

Не могли бы вы шаг меня через точки зрения C#, если это не слишком много проблем? Хотя ваше решение звучит так, как будто это сработает. – Fred

+0

см. Мое редактирование выше. –