自动保存动态创建的控件的最佳方法

本文关键字:控件 方法 最佳 创建 保存 动态 | 更新日期: 2023-09-27 18:07:00

我想做什么

我有一个。aspx网页显示动态创建的控件,主要是复选框,标签,文本框。控件位于Repeater中的PlaceHolder中。我要做的是自动保存更改。

我读了很多书,想知道我应该怎么做,我相信我有以下选择。

  • 使用SetInterval
  • 定时自动保存
  • 更改时保存

现在我正在尝试做后一种选择,它确实会自动保存,但正如许多其他人在阅读中提到的那样,它闪烁和标签令人沮丧,因为它失去了焦点。

我已经尝试过AutoPostBack,它的工作原理,但它又不是那么用户友好,因为闪烁和标签问题。

我也尝试过JQuery AJAX功能,它的工作原理,但在可用性同样的问题。由于我是AJAX的新手,我不确定在中继器中为每个控件使用ScriptManagerUpdatePanel是否是一个好的做法。

要在动态创建的控件中自动保存值并避免闪烁和标签问题(失去焦点等),我应该采取什么方法?

自动保存动态创建的控件的最佳方法

事情总是需要时间的,但是你可以使用一些javascript,一些页面脚本和一个服务。

使用Toolkitscriptmanager和Ajax服务引用到另一个asmx,它将处理保存东西所需的调用。

    <asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server"
        EnablePageMethods ="true" >
          <Services>
             <asp:ServiceReference  path="saveMyvalues.asmx" />
           </Services>
    </asp:ToolkitScriptManager>

然后在一些javascript中,当你的自动保存定时器触发;将要保存的值传递给asmx页面,该页面将处理值....

的保存。

之类的…

   function saveAsingleTextbox(sndr){
          saveMyvalues.saveATextBox(sndr.id, sndr.value);
   }

您将需要脚本遍历所有控件或目标每个…

但是一个更好的方法是有选择地触发单个项目,因为它们被改变了…

您可以通过在页面加载时添加触发器来实现这一点…

  <asp:TextBox ID="tb_FirstName" runat="server"></asp:TextBox>

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      If IsPostBack = False Then
          tb_FirstName.Attributes.Add("onChange", "saveAsingleTextbox(this);") 
      End If
   End Sub

因此,Javaxscript触发器被添加到文本框中,以调用将其值传递给ASMX页面的函数,该页面在更改时保存它…