我在 AJAX UpdatePanel 内的表单上有一堆用户控件,其中包含几个控件,其中包括一个 TextBox。
每个用户控件都构成数据输入表单上的一个字段。某些字段已打开 AutoPostBack 并触发一个事件,该事件会更新服务器端另一个表单字段中的值。
但是,当部分回发返回并且更新计算字段时,表单焦点将丢失 - 表单上的第一个字段将重新获得焦点。因此,该表格对于数据输入来说毫无用处。
我已经看到了解决方法,涉及计算出服务器端接下来要关注的字段并使用 ScriptManager.SetFocus(),在表单中传递下一个 UserControl,但我无法让它与我的用户控件一起使用。无论如何,这仍然感觉像是一种黑客行为,而且令人失望的是 UpdatePanel 不仅仅使这项工作可行。
使用 ASP.NET 4.0、Visual Studio 2010。
I have a bunch of user controls on a form inside an AJAX UpdatePanel, containing a couple of controls including a TextBox.
Each of these usercontrols makes up a field on a data entry form. Some of the fields have AutoPostBack turned on and fire an event which updates the value in another form field server-side.
However, when the partial postback returns and the calculated field is updated, the form focus is lost - the first field on the form gets focus back. Therefore the form is pretty useless for data entry.
I have seen workarounds that involve working out server-side which field to focus on next and using ScriptManager.SetFocus(), passing in the next UserControl in the form, but I can't get this to work with my usercontrols. This still feels like a hack anyhow, and it's disappointing that UpdatePanel doesn't just make this work.
Using ASP.NET 4.0, Visual Studio 2010.
发布评论
评论(1)
好的,我认为你的问题是你将所有内容都包含在 updatepanel 中,我的方法是仅将 updatepanels 用于需要更新的控件(也许你需要多个), updatepanels 需要有 UpdateMode=Conditional并且仅由影响内部控件的控件触发,执行回发的控件应该位于 updatepanel 之外,我发布了一个我已经测试过并且工作正常的示例。
您可以猜到 TextBox2 更新 Label1,Textbox4 更新 Label2。
Ok, I think your problem is that you are including everything inside the updatepanel, my approach would be to use updatepanels only for the controls that need to be updated (maybe you would need more than one), the updatepanels would need have UpdateMode=Conditional and triggered only by the control that affects the controls inside, the control that does the postback should be outside of the updatepanel, I'm posting an example that I've already tested and works fine.
As you can guess TextBox2 updates Label1 and Textbox4 updates Label2.