当 FormView 设置为插入模式时,控件在回发后不保留值
我使用 Page_Load 事件中的 ChangeMode 方法将 FormView 的 CurrentMode 设置为插入模式,如下所示:
if(!Page.IsPostBack)
{
MyFormView.ChangeMode(FormViewMode.Insert);
}
在 FormView 的插入模板中,我有一个 DropDownList 控件,其 AutoPostBack 属性设置为 true。 我在插入模板中还有其他几个 DropDownList 和 TextBox 控件。
每当我更改 DropDownList 的选择并发生回发时,我都会丢失输入到控件中的所有值。 奇怪的是,如果我在初始页面加载后随时使用 ChangeMode 将 FormView 设置为插入模式,则不会出现问题。 我已经使用调试器单步执行了代码,一切似乎都正确发生,但有时在 DropDownList 的事件处理程序运行后,一切似乎都在重置。
这里发生了什么?
更新: 我注意到我的 FormView 位于带有 runat="server" 和 enableviewstate="false" 的 div 标记内。 一旦我为容器 div 启用了 viewstate,我就开始看到略有不同的行为。 FormView 在第一次回发后仍然不保留值,但现在后续回发工作正常并且保留值。
任何想法将不胜感激。
I am setting the CurrentMode of a FormView to insert mode using the ChangeMode method in the Page_Load event like so:
if(!Page.IsPostBack)
{
MyFormView.ChangeMode(FormViewMode.Insert);
}
Within my FormView's insert template I have a DropDownList control with it's AutoPostBack property set to true. I also have several other DropDownList and TextBox controls within the insert template.
Whenever I change the selection of the DropDownList and a postback occurs I'm losing all the values entered into the controls. The weird thing is that if I use ChangeMode to set the FormView to insert mode anytime after the initial page load I don't have the problem. I've stepped through the the code with the debugger and everything seems to be happening correctly but sometime after my event handler for the DropDownList runs everything seems to be getting reset.
What is going on here?
Update:
I noticed that my FormView was inside of a div tag with runat="server" and enableviewstate="false". Once I enabled viewstate for the container div I began seeing a slightly different behavior. The FormView still does not retain values after the first postback but now subsequent postbacks work fine and the values are retained.
Any ideas would be greatly appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
此答案来自 Walter Wang [MSFT] 的其他论坛 - 2007 年 1 月 26 日 03:29 GMT
我已经在我这边测试过它,它似乎工作正常。 请给它一个
尝试让我知道结果。
This answer from other forum by Walter Wang [MSFT] - 26 Jan 2007 03:29 GMT
I've tested it on my side and it seems working correctly. Please give it a
try and let me know the result.
尝试
Try
ViewState 在 PageLoad 之前加载,我的猜测是,通过更改 PageLoad 上的模式,会重新创建另一组控件,即 EditItemTemplate 中的控件。 如果默认设置为编辑模式,并且您在 PageLoad 上取消注释该行,它会保留这些值吗? 如果不切换模式应该可以。
The ViewState loads before PageLoad and my guess is that by changing the Mode on PageLoad recreates another set of controls, the ones in your EditItemTemplate. If it is set by default to Edit Mode, and that you uncomment that line on PageLoad, will it maintain the values? It should if you don't switch the mode.
FormView.ChangeMode(FormViewMode.Insert)
这必须有效,检查 Id 并使用智能感知?
我的示例是添加项目表单视图。
尝试在页面加载时执行此操作,而不使用任何“if..then”,如果它有效,您会知道这不是表达式,而可能是 if 内容或结构。
请记住让控件 ID 有意义,这样当您需要使用它们或通过智能感知调用它们时,会更容易并且不太可能出错。
好运。
:)
FormView.ChangeMode(FormViewMode.Insert)
This must work, check Id's and use intelisense?
my example is with a add item form view..
Try to do it on page load without any "if..then's", if it works you'll know that isn't the expression but maybe the if content or construction.
Remember to make the control IDs meaningful so it will be easier and less likely to do mistakes when you need to use them or call them through intelisense.
Best luck.
:)
我遇到了类似的视图状态问题,未保留在
EditItem
模板中。设置EnableViewState = true也没有帮助。
我所做的是获取
OnUpdated()
函数,并在函数的最后,希望这会有所帮助..
I am having the similar issue of viewstate not retained at
EditItem
template.Setting
EnableViewState = true
doesnt help either.What i do is get the
OnUpdated()
function, and at the very end of the function,Hope this helps..
尝试更改页面初始化或预渲染事件的模式
try to change mode on Page Init or or Prerender events