WebForms Repeater, установка атрибута текстового поля, который будет использоваться в качестве идентификатора при сохранении - PullRequest
0 голосов
/ 24 апреля 2018

Я создаю относительно простую веб-форму, в которой есть два столбца с примерно 15 фиксированными полями ввода в каждом, а 1 - «Другое» со счетом (n).

Я создал Ретранслятор так:

<asp:Repeater ID="rptClientItems" runat="server" OnItemDataBound="rptClientItems_ItemDataBound">
    <ItemTemplate>
        <div class="row">
            <div class="col-md-8">
                <asp:Label ID="lblItemType" runat="server"></asp:Label>
                <asp:TextBox ID="txtOtherItemTypeDescription" runat="server" Visible="false"  CssClass="lblandinput"></asp:TextBox>
            </div>
            <div class="col-md-4">
                <asp:TextBox ID="txtItemTextBoxArea" runat="server"></asp:TextBox>
            </div>
        </div>
    </ItemTemplate>
</asp:Repeater>

Теперь в моей функции ItemDataBound() я зацикливаюсь на всех своих элементах базы данных и заполняю значения в этих текстовых областях и метках.

Проблема 1 - это когда я нажимаю SAVE(). В моей функции сохранения я понятия не имею, какой Textbox принадлежит какому элементу в базе данных.

Issue 2 my txtOtherItemTypeDescription создается динамически, поэтому при сохранении я использую Request.Form.GetValues("key") для получения всех значений, однако я считаю, что это не самый продуктивный способ сделать это, так как это также приводит к Вышеуказанный вопрос после первого сохранения сохранит редактирование этих элементов.

Я относительно новичок в этом хорошем примере, и объяснения будут иметь большое значение. Спасибо

1 Ответ

0 голосов
/ 24 апреля 2018

Если вы хотите продолжать использовать Repeater, самое простое решение - добавить скрытую метку, поскольку Repeater не имеет свойства DataKeyField.Yo может использовать эту метку для хранения идентификатора.

<ItemTemplate>
    <asp:Label ID="hiddenID" runat="server" Text='<%# Eval("ID") %>' Visible="false"></asp:Label>
</ItemTemplate>

Является ли ваш метод сохранения, вы можете затем зациклить элементы повторителя и получить значение TextBox и метки.

foreach (RepeaterItem item in rptClientItems.Items)
{
   Label lb = item.FindControl("hiddenID") as Label;
   TextBox tb = item.FindControl("txtItemTextBoxArea") as TextBox;

   Label1.Text += lb.Text + ": " + tb.Text + "<br>";
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...