如何使用ASP.net保存复选框值?

时间:2012-01-18 19:11:34

标签: asp.net checkbox updatepanel save

我目前有一个表单,用户必须在复选框列表中选中复选框,然后再单击保存按钮,将其选择保存到数据库中。从数据库中检索值列表并将其绑定到复选框列表。所以它基本上是一个动态的复选框列表。

我想更改此选项,以便在用户选中复选框后立即将用户的选择保存到数据库中。

我认为这可以使用updatepanel,datalist和复选框来完成。

示例:

<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 :(得分:0)

穿线这个怎么样?所以animal_click事件将创建一个单独的线程。因此,这不会导致UI等待更新/插入完成。

这样称呼它:

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

public delegate void MethodInvoker();

private void Threaded()
{
    //do stuff
}