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

时间:2014-06-05 16:33:27

标签: c# jquery asp.net ajax

我想做什么

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

我一直在阅读很多内容,以了解我应该怎么做,我相信我有以下选择。

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

问题

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

我尝试使用AutoPostBack并且它可以正常工作,但由于闪烁和标签问题,它不再那么用户友好。

我也尝试过使用JQuery AJAX函数并且它可以工作,但是在可用性方面存在同样的问题。由于我是AJAX的新手,我不确定在转发器中为每个控件使用ScriptManagerUpdatePanel是否是一个好习惯。

问题

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

1 个答案:

答案 0 :(得分:0)

事情总是需要时间,但你可以使用一些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页面的函数,该页面将其保存在更改中...