【问题标题】:ASP.NET - FormView bound to LinqDataSource shows data but won't update database (Updating event fires however)ASP.NET - 绑定到 LinqDataSource 的 FormView 显示数据但不会更新数据库(但是会触发更新事件)
【发布时间】:2011-08-09 13:02:56
【问题描述】:

我有一个绑定到 LinqDataSource 的 FormView,旨在允许编辑从 GridView 中选择的单个产品的详细信息。 LDS 有一个 Where 参数设置为指向 GridView 控件(即 ControlParameter):

<asp:LinqDataSource ID="ldsProduct" runat="server" OnContextCreating="LinqDataSource_ContextCreating"
EnableDelete="True" EnableInsert="True" EnableUpdate="True" TableName="Products"
Where="ProductID=@ProductID" OnSelecting="ldsProduct_Selecting" OnUpdating="ldsProduct_Updating"
OnInserted="ldsProduct_Inserted" OnUpdated="ldsProduct_Updated" OnDeleted="ldsProduct_Deleted">
<WhereParameters>
    <asp:ControlParameter Name="ProductID" ControlID="gvProducts" />
</WhereParameters>

FormView确实显示我在 GridView 中选择的任何产品记录。但是,当我单击更新时,不会对数据库运行更新

这是我看到的:

  • 在 FormView 的 ItemCommand 处理程序中,会发生更新命令
  • 接下来,LDS 的更新事件会触发,但是如果我查看 e.NewObject 附加了一个 Product 对象,但它只设置了 ProductID(设置为正确的值) - 未设置所有其他属性。毫无疑问,这就是为什么更新永远不会访问数据库的原因。

我已尝试将 FormView 显式设置为编辑模式,并在 FormView 的 ItemCommand 处理程序中对其进行数据绑定,但没有区别,即:

fvProduct.ChangeMode(FormViewMode.Edit)
fvProduct.DataBind()

我只是不明白 FormView 在显示其数据时如何清楚地绑定到 Product 对象,但在 Update 命令运行时会丢失它。

顺便说一句,我正在为 DataContext 使用自定义构造函数,但如果我将 OnContextCreated 替换为通常的 ContextTypeName,问题仍然会发生。

【问题讨论】:

    标签: gridview formview linqdatasource


    【解决方案1】:

    想通了。默认情况下必须关闭 FormViews 的 Viewstate。当设置 EnableViewstate="true" 时,控件在回发时会“正常”运行。

    【讨论】:

      猜你喜欢
      • 2014-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2012-07-03
      • 1970-01-01
      相关资源
      最近更新 更多