我有一个.aspx网页,显示动态创建的控件,主要是复选框,标签,文本框。控件位于Repeater中的PlaceHolder内。我想要做的是自动保存更改。
我一直在阅读很多内容,以了解我应该怎么做,我相信我有以下选择。
现在我正在尝试做后一种选择并且它会自动保存,但是正如读数中提到的其他人一样,它闪烁和标签是令人沮丧的,因为它失去了焦点。
我尝试使用AutoPostBack并且它可以正常工作,但由于闪烁和标签问题,它不再那么用户友好。
我也尝试过使用JQuery AJAX函数并且它可以工作,但是在可用性方面存在同样的问题。由于我是AJAX的新手,我不确定在转发器中为每个控件使用ScriptManager
和UpdatePanel
是否是一个好习惯。
要在动态创建的控件中自动保存值并避免闪烁和标记问题(失去焦点等),我应该采取什么方法?
答案 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页面的函数,该页面将其保存在更改中...