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

标签 c# jquery asp.net ajax

我想做什么

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

我已经阅读了很多书来寻找我应该如何去做,我相信我有以下选择。

  • 使用 SetInterval 定期自动保存
  • 修改后保存

问题

现在我正在尝试执行后一个选项并且它会自动保存,但正如许多其他人在阅读 Material 中提到的那样,它闪烁和跳格令人沮丧,因为它失去了焦点。

我尝试过使用 AutoPostBack 并且它可以工作,但是由于闪烁和跳格问题,它又不是那么用户友好。

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

问题

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

最佳答案

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

使用带有 Ajax 服务引用的 Toolkitscriptmanager 到另一个 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 页面的函数,ASMX 页面将其保存在更改...

关于c# - 自动保存动态创建的控件的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24065563/

相关文章:

c# - 如何将数据从 asp.net MVC Controller 发布到非 MVC asp.net 页面?

javascript - 如何制作带有文件字段的隐藏表单

css - Internet Explorer 中 bootstrap 4 的 img-fluid 问题

html - ASP :linkbutton after asp:linkbutton not to jump lines

c# - 如何在 C# 中获取目录大小(目录中的文件)?

c# - 有没有一种工具可以将 C# 部分类文件重新组装成一个类源代码文件?

c# - 更改 facebook redirect_uri web api

c# - 使用 DynamicMethod 编写脚本

jquery选择div中三段的html

jquery - 当通过 jQuery 使用另一个 Bootstrap Multiselect 时,如何重置一个 Bootstrap Multiselect