Как сохранить значение флажка при проверке с использованием ASP.net? - PullRequest
0 голосов
/ 18 января 2012

В настоящее время у меня есть форма, в которой пользователь должен снять флажки в списке флажков, прежде чем нажимать кнопку «Сохранить», которая сохраняет их выборки в базе данных. Список значений извлекается из базы данных и привязывается к списку флажков. Так что это в основном динамический список флажков.

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

Я думал, что это можно сделать с помощью панели обновления, списка данных и флажков.

Пример:

<asp:UpdatePanel ID="upnlServices" runat="server" UpdateMode="Conditional">
    <ContentTemplate>

    <asp:DataList ID="dlistAnimals" runat="server">
        <ItemTemplate>
        <asp:CheckBox ID="chkAnimal" AutoPostBack="true" OnCheckedChanged="animal_click" runat="server" />
        <asp:Label ID="lblAnimal" AssociatedControlID="chkAnimal" runat="server"<%#Eval("Name")%></asp:Label>
        </ItemTemplate>
    </asp:DataList>

    </ContentTemplate>
</asp:UpdatePanel>

"animal_click" - это функция в коде, которая добавляет или удаляет значение из базы данных, используя хранимую процедуру. Если выбор был ранее выбран, он удаляется, но если выбор не существует в базе данных, он просто добавляется.

Это все работает на моей локальной машине, но когда я помещаю его на удаленный сервер, форма кажется медленной. Пользователь быстро отметит несколько флажков, но не все варианты были сохранены в базе данных. Создается впечатление, что сервер недостаточно быстро справляется с действиями пользователя.

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

1 Ответ

0 голосов
/ 18 января 2012

А как насчет этого? Таким образом, событие animal_click создаст отдельный поток. Так что это не заставит пользовательский интерфейс ждать завершения обновления / вставки.

Как-то так это назвать:

MethodInvoker mi = new MethodInvoker(Threaded);
mi.BeginInvoke(null, null);

и

public delegate void MethodInvoker();

private void Threaded()
{
    //do stuff
}
...