Как получить содержимое элемента управления в динамической таблице?

У меня есть страница, на которой я хотел бы собрать информацию о x количестве пользователей. У меня есть элемент управления, в котором вы вводите количество пользователей, и на основе этого числа я создаю динамическую таблицу со строкой для каждого пользователя. В каждой строке таблицы есть элементы управления текстовыми полями, из которых я хотел бы получить значение при обратной передаче. Как это можно сделать?


person zeroef    schedule 25.08.2010    source источник


Ответы (2)


На какой конкретный стиль ASP.Net вы ориентируетесь? ASP.Net MVC? Веб-формы?

Самый быстрый и простой способ сделать что-то подобное в веб-формах (с которыми я более знаком) — это поместить элемент управления GridView на страницу и привязать к нему общую коллекцию, размер которой вы устанавливаете на основе числа, введенного в контроль.

Вот быстрый 10-метровый фрагмент кода. Создан веб-проект WebForms по умолчанию в Visual Studio 2010.

Источник веб-страницы:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="WebApplication1._Default" %>

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">

    <p>
        <table>
            <tr>
                <td>Rows:</td>
                <td><asp:TextBox ID="TextBox1" runat="server" />
                    <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" />
                </td>
            </tr>
            <tr>
                <td colspan=2>
                <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
                    <Columns>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
                    <asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Button" />
                </td>
            </tr>
        </table>


    </p>

</asp:Content>

Код позади:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace WebApplication1
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Init(object sender, EventArgs e)
        {

        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            List<string> users = new List<string>(Enumerable.Repeat(string.Empty, Int32.Parse(TextBox1.Text)));
            GridView1.DataSource = users;
            GridView1.DataBind();
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            var list = from GridViewRow row in GridView1.Rows
                       where row.RowType == DataControlRowType.DataRow
                       select (row.FindControl("TextBox2") as TextBox).Text;
            // now do something with this list of strings
        }
    }
}
person Kilanash    schedule 25.08.2010
comment
Я использую веб-формы. Ваш пример выглядит близко к тому, что я сейчас пишу, основываясь на предложении Билла использовать gridview. - person zeroef; 26.08.2010

Возможно, вам будет проще создать asp:GridView. Затем вы можете перебирать строки при обратной передаче и проверять элементы управления. Там много примеров кода.

person Bill    schedule 25.08.2010
comment
Это был мой следующий план атаки. Имея сильный классический опыт работы с ASP, я создал страницу, предполагая, что будет не так уж сложно ссылаться на динамически создаваемые элементы управления. - person zeroef; 26.08.2010