ASP.NET - 绑定到 LinqDataSource 的 FormView 显示数据但不会更新数据库(但是会触发更新事件)

发布于 2024-10-16 16:50:28 字数 1322 浏览 1 评论 0原文

我有一个绑定到 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(设置为正确的 ProductID) value) - 未设置所有其他属性。毫无疑问,这就是更新永远不会到达数据库的原因。

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

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

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

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

I have a FormView bound to LinqDataSource, that is intended to allow editing of a single product's details, that is selected from a GridView. The LDS has a Where parameter set to point to the GridView control (i.e. a 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>

The FormView does show whichever product record I select in the GridView. However when I click Update, no update is run against the database.

This is what I have seen:

  • In the FormView's ItemCommand handler, the Update command happens
  • Next, the LDS's Updating event fires however if I look at e.NewObject there is a Product object attached, but it only has it's ProductID set (to the correct value) - all other properties are not set. No doubt this is why the update never hits the database.

I have tried explicitly setting the FormView to Edit mode, and databinding it in the FormView's ItemCommand handler, but it makes no difference, i.e.:

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

I just don't get how the FormView is clearly bound to a Product object when it is showing its data but looses it when the Update command runs.

By the way, I am using a custom constructor for the DataContext, but if I replace OnContextCreated with the usual ContextTypeName the problem still happens.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

时间你老了 2024-10-23 16:50:28

想通了。对于 FormViews,Viewstate 必须默认关闭。当设置 EnableViewstate="true" 时,控件在回发时行为“正确”。

Figured it out. Viewstate must be turned off by default for FormViews. When EnableViewstate="true" is set, the control behaves "properly" on postback.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文