我想做什么
我有一个 .aspx 网页显示动态创建的控件,主要是复选框、标签、文本框。控件位于 Repeater 内的 PlaceHolder 内。我想要做的是自动保存更改。
我已经阅读了很多书来寻找我应该如何去做,我相信我有以下选择。
- 使用 SetInterval 定期自动保存
- 修改后保存
问题
现在我正在尝试执行后一个选项并且它会自动保存,但正如许多其他人在阅读 Material 中提到的那样,它闪烁和跳格令人沮丧,因为它失去了焦点。
我尝试过使用 AutoPostBack 并且它可以工作,但是由于闪烁和跳格问题,它又不是那么用户友好。
我也尝试过使用 JQuery AJAX 函数并且它有效,但在可用性方面存在同样的问题。由于我是 AJAX 的新手,我不确定对转发器中的每个控件使用 ScriptManager
和 UpdatePanel
是否是一个好习惯。
问题
要在动态创建的控件中自动保存值并避免闪烁和跳格问题(失去焦点等),我应该采取什么方法?
最佳答案
事情总是需要时间,但您可以使用一些带有一些页面脚本和服务的 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/