强制ASP.NET控件重新加载数据

强制ASP.NET控件重新加载数据,asp.net,viewstate,control-state,Asp.net,Viewstate,Control State,我知道有很多关于禁用ViewState不会阻止文本框在刷新/回发中持久化值的信息。我不能了解的是关于如何规避这种行为的信息 这就是为什么我要这么做。我有一个通过AJAX更新db的表单。每次用户更改字段时,数据库都会立即更新。因此,除了数据库之外,没有理由在任何地方存储值 考虑以下场景 用户加载页面时,textbox FirstName的值为“Bob” 用户将名字更改为“Dave”。(数据库更新) 用户单击刷新按钮 我们希望FirstName框现在的值为“Dave”,但它显示的是“Bob”。那么,

我知道有很多关于禁用ViewState不会阻止文本框在刷新/回发中持久化值的信息。我不能了解的是关于如何规避这种行为的信息

这就是为什么我要这么做。我有一个通过AJAX更新db的表单。每次用户更改字段时,数据库都会立即更新。因此,除了数据库之外,没有理由在任何地方存储值

考虑以下场景

  • 用户加载页面时,textbox FirstName的值为“Bob”
  • 用户将名字更改为“Dave”。(数据库更新)
  • 用户单击刷新按钮
  • 我们希望FirstName框现在的值为“Dave”,但它显示的是“Bob”。那么,如何强制ASP从db加载这些值呢

    用户单击刷新按钮

    在这一步中,您将从数据库中读取数据,并使用该数据强制填充控件。如果页面中的所有“事件”实际上都是由AJAX请求处理的,那么听起来只有两个有意义的“WebForms事件”是
    page\u Load
    和“refresh”按钮的
    Click
    处理程序。这两个事件之一应该从数据库中重新填充控件


    (或者没有“刷新”按钮,用户只是通过浏览器功能重新加载页面?在这种情况下,
    page\u Load
    应该总是从数据库中填充控件。)

    我遇到的问题似乎与在正确的页面事件中创建和填充控件有关。通过在Page_Init中创建控件并在Page_Load中填充它们来修复此问题。

    值​​仅在提交/回发信息后更改。您可以使用AJAX调用来完成此操作,而无需刷新。啊哈。问题是我是在pageinit中填充的,而不是pageload。谢谢这方面的最新情况。对于“常规”控件来说,它似乎工作得很好,但对于那些动态创建的控件来说,情况并非如此。我可以在codebehind中验证是否为动态控件设置了正确的值,但这些值似乎在某个地方被覆盖。有什么想法吗?@christok:这些想法在哪里被推翻了?在整个WebForms页面生命周期中,页面控件会发生很多事情。这可能足够值得提出一个新问题,但至少值得用代码更新现有问题以重现观察到的行为。谢谢David-如果你看到我下面的答案,我已经找出了问题所在,尽管我无法解释原因。在创建控件值的同时,我一直在尝试设置控件值(在页面加载中)。我真正需要做的是将其拆分:在Init中创建控件并在Load中设置值。这种事件顺序听起来更接近引擎在WebForms页面生命周期中的内部操作:本质上,Init阶段是创建控件的地方,在加载阶段,可以设置它们的属性。