【问题标题】:DataGrid button - Invalid Postback or CallbackDataGrid 按钮 - 无效的回发或回调
【发布时间】:2011-03-26 03:20:46
【问题描述】:

我已经设置了一个 DataGrid,其中包含许多列以及行尾的复选框和列。

我还在 OnItemCreated 事件上更改数据网格的布局,该事件通过扩展具有“Rowspan”属性的行并删除不再需要的额外列和控件来更改数据网格的布局。

原来的数据网格布局是这样设置的:

___________________________________________
| 1 | Employee Name | 01/08/10 |[] |[SAVE]|
| 1 | Employee Name | 02/08/10 |[] |[SAVE]|
___________________________________________
| 2 | Employee Name | 01/08/10 |[] |[SAVE]|
___________________________________________
| 3 | Employee Name | 04/08/10 |[] |[SAVE]|
| 3 | Employee Name | 05/08/10 |[] |[SAVE]|
| 3 | Employee Name | 06/08/10 |[] |[SAVE]|
___________________________________________
| 4 | Employee Name | 03/08/10 |[] |[SAVE]|
___________________________________________

现在看起来像这样,行展开,控件删除,数据网格列删除...

___________________________________________
| 1 | Employee Name | 01/08/10 |[] |[SAVE]|
|   |               | 02/08/10 |   |      |
___________________________________________
| 2 | Employee Name | 01/08/10 |[] |[SAVE]|
___________________________________________
| 3 | Employee Name | 04/08/10 |[] |[SAVE]|
|   |               | 05/08/10 |   |      |
|   |               | 06/08/10 |   |      |
___________________________________________
| 4 | Employee Name | 03/08/10 |[] |[SAVE]|
___________________________________________

页面在打开时显示,并且每次用户单击页码时分页控件都会按预期工作。

但是,当我单击特定员工的 [保存] 按钮时,错误消息会显示类似“无效回发或回叫”的消息。我知道这是我在数据网格中删除的控件和列的结果,并且事件验证与原始呈现的项目不匹配。

我不想删除 EnableEventValidation,因为它是一个安全问题。

我知道我必须使用 Render 方法来修复我在页面显示之前所做的任何更改,但是如何解决这个回发问题?

【问题讨论】:

    标签: asp.net datagrid button postback render


    【解决方案1】:

    好的,让我们看看错误来自哪里。

    GridView 使用 __DoPostBack() javascript 调用,他自己没有输入。所以他自己不会从其他单元格发送任何输入数据。

    现在我认为您没有进行自定义 DoPostBack 调用 - 对吧?

    验证的第二点是在 ViewState 数据上。

    是否通过任何更改来使用任何 UpdatePanel 并在中间进行更改此 ViewState 的任何更新?

    我建议您尝试在您的 GridView 上发送 EnableViewState="false" 以查看您是否仍然收到此错误。这不会影响您,因为每次更新时 GridView 都会重新读取需要创建的数据。

    您需要检查的第二点是您更改数据并影响视图状态的点。也许把它放在其他地方可以解决问题。例如,如果您将它放在 Page_Load 上,则可能需要将其移动到 PageInit - 反之亦然。

    希望对您有所帮助。

    【讨论】:

    • 嗨 Aristos,是的,我确实在更新面板中有数据网格,现在禁用了 EnableViewState。该按钮现在可以正常工作,并且我能够按预期读取复选框的值。但是,无论我在哪一页上,页码都会重置回第 1 页。如果在删除视图状态后无法从数据网格中检索值,如何获取页码?谢谢。
    • @laughing 未能保留页面与您有地方读取数据的点有关 - 您执行 Bind() 并在数据网格上设置数据的点。你把它放在寻呼机之后,所以它会丢失它。更改您在 datagrid 上设置数据的点,例如在 pageinit 上移动它并检查它。这可能是从一开始的问题。
    • 我更改了重新绑定数据的位置,数据网格按预期工作。
    猜你喜欢
    • 1970-01-01
    • 2012-02-28
    • 2014-02-05
    • 2011-03-24
    • 1970-01-01
    • 2014-11-18
    相关资源
    最近更新 更多