0

问题是SelectMethod和其他操作执行两次。这很难隔离,因为它只发生在更大的解决方案上,而不是在更简单的演示应用程序中。

//.ascx
<asp:FormView runat="server" DataSourceID="userSource" DefaultMode="Edit">
    <EditItemTemplate>

<mvp:PageDataSource id="userSource" SelectMethod="GetUser" />

//code behind 
public User GetUser()
{
     //returning single item as FormView is only DefaultMode=edit
     return Model.User;
}

//presenter
public class UserOtherEditPresenter<IUserOtherEditView<UserEditViewModel>>

在这里尝试调试这个是跟踪AXD 文件

更新:

正如已经指出的那样,初始化似乎很好,因此问题必须存在于与应用程序的某些其他方面发生冲突的其他地方。

4

2 回答 2

1

我遇到了同样的问题,快速解决方法是为您的用户控件设置 AutoDataBind = false。这将停止对 FormView 的 DataBind 的第二次调用,进而停止对 SelectMethod 的第二次调用。第一次调用 formView.DataBind 作为 Page.ProcessRequestMain 的一部分发生,并且由于数据网格上的 DataSourceID 而发生。

于 2010-12-28T12:34:37.040 回答
1

我想将其发布为对您的问题的评论,但是要么因为我的徽章数量不足(我可以用 FourSquare 的徽章进行交易吗?),要么没有给我这个特权,或者 UX 让我太困惑了。这是我没有回答的答案:

您发送的 trace.axd 是否旨在证明问题?这一切在我看来都很正常。它只绑定一个演示者:

为 ADC.Logic.Views.IUserOtherEditView`1[[ADC.Logic.Views.Models.UserEditViewModel, ADC.Logic, Version=1.0.0.0, Culture=neutral, 创建 ADC.Logic.Presenters.UserOtherEditPresenter 类型的演示者, PublicKeyToken=null]]。(实际的视图实例是 ASP.controls_userotheredit_ascx 类型。

根据您的问题的标题,我们希望看到此事件两次。

但是,您的问题的标题内容与我不匹配。您是说 SelectMethod 被多次触发,这可能表明 PageDataSource 存在问题。

你能澄清一下吗?

于 2010-09-21T23:16:35.980 回答