2010-09-21 73 views
0

問題是SelectMethod和其他操作執行兩次。這很難分離,因爲它只發生在一個更大的解決方案上,而不是更簡單的演示應用程序。ASP.NET WebFormsMVP PageDataSource事件執行兩次對於未知原因

//.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 file

更新:

正如有人指出,初始化似乎罰款,所以這個問題必須與應用程序的一些其他方面的衝突在其他地方。

+0

AXD文件是發生這種情況的頁面的trace.axd,而GitHub repo是一個演示應用程序,它不會遇到同樣的問題,但以類似的方式進行設置。 – 2010-09-21 04:53:20

+0

該問題似乎與註冊或初始化完全不同(您可以在Trace.axd中看到用戶控件已找到並註冊一次)。我真的需要一個實際展示此問題以幫助調試的頁面示例。這個頁面啓用了ViewState,是否有 – 2010-09-21 23:17:47

+0

?如果沒有,有senerios選擇方法將被調用兩次[我已經看到這與ObjectDatasource] – 2010-09-21 23:53:03

回答

1

我想張貼這個作爲你的問題的評論,但是SO或者不給我這個特權,因爲我沒有足夠數量的徽章(我可以交易FourSquare的嗎?),或UX只是讓我困惑太多了。以下是我的非答案答案:

您發送的trace.axd是否意味着展示問題?這一切對我來說都很正常。這只是一個結合主持人:對視圖類型ADC.Logic.Views.IUserOtherEditView`1 [ADC.Logic.Views.Models.UserEditViewModel,ADC的類型ADC.Logic.Presenters.UserOtherEditPresenter的

創建演示。 Logic,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]。 (實際視圖實例的類型爲ASP.controls_userotheredit_ascx。

根據你的問題的標題我們預期的兩倍看到此事件。

然而,標題您的問題的內容與我不符,您說SelectMethod被多次觸發,這可能表明PageDataSource存在問題。

您能否澄清?

+0

是的,我選擇的頁面標題並不能反映實際問題,它實際上只是執行兩次的PageDataSource方法。我將修改問題標題。 – 2010-09-21 23:35:57

+0

很酷 - 謝謝。 :) – 2010-09-21 23:57:11

1

我有同樣的問題,快速解決方法是爲您的用戶控件設置AutoDataBind = false。這會停止對FormView的DataBind的第二次調用,而這又會停止對SelectMethod的第二次調用。 FormView.DataBind的第一次調用是作爲Page.ProcessRequestMain的一部分發生的,並且由於DataGrid上的DataSourceID而發生。