我讨厌 ViewState,喜欢 DetailsView/GridView + ObjectDataSource 做后台管理,看,这个做后台时又遇到个问题?
添加 GridView1,设置 DataSourceID="ObjectDataSource1",FIelds 里添加一个 asp:CommandField 列,ShowDeleteButton="True"
添加 ObjectDataSource1,设计时选择 BLL.* 类型,分别选择 Insert,Delete,Update,Select 控制函数
Insert,Update,Select 一切正常,没有问题发生,要有问题也一定是 EnableViewState 的值不为 True
ObjectDataSource1 里明明设置了 DeleteMethod 和 DeleteParamters,名字无误,类型无误。
反复试了几次,还是删除不了,也没有错误,单步 Debug ObjectDataSource1.OnDeleting 后发现 e.InputParameters 里的值为其它字段了,于是我想起没有设置 GridView.DataKeyNames 值,设置完后,再 F5,继续删除不了。
大家都知道 GridView 里的集成的控制都是回传过程,回传时会将 WebForm 里所有 Input 发送到服务器端验证,包括 ViewState。
HTTP Get 页面后再删除就没问题了。
ViewState 真恶心。