好的,所以我正在使用ASP WebForms并在另一个ListView(用于帐户)中有一个ListView(用于帐户客户)。
此内部ListView具有帐户客户的ObjectDataSource(在此特定应用程序中称为参与者)。
这是:
<asp:ObjectDataSource ID="dataSourceParticipants" runat="server"
SelectMethod="GetParticipantsForAccount"
UpdateMethod="UpdateParticipantDetails"
DeleteMethod="DeleteParticipantDetails"
InsertMethod="InsertParticipantDetails"
TypeName="PreScreening2.AccountManagerWrapper"
DataObjectTypeName="PreScreening2.BLL.Models.Participant">
<SelectParameters>
<asp:ControlParameter ControlID="grdAccounts" Name="accountNumber" PropertyName="SelectedDataKey.Values[AccountNumber]"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
这是我的AccountManagerWrapper类(命名不佳):
public class AccountManagerWrapper
{
[Inject]
public IAccountManager AccountManager { get; set; }
[Inject]
public IParticipantManager ParticipantManager { get; set; }
public IEnumerable<Participant> GetParticipantsForAccount(string accountNumber)
{
return AccountManager.GetParticipantsForAccount(accountNumber);
}
public bool UpdateParticipantDetails(Participant participant)
{
return ParticipantManager.UpdateParticipantDetails(participant, null, AccountManager);
}
public bool DeleteParticipantDetails(Participant participant)
{
return ParticipantManager.DeleteParticipant(participant, null, AccountManager);
}
public bool InsertParticipantDetails(Participant participant)
{
return ParticipantManager.UpdateParticipantDetails(participant, null, AccountManager);
}
}
在我的外部ListView的 ItemDataBound 事件中,我这样做:
protected void grdAccounts_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (e.Item.ItemType == ListViewItemType.DataItem)
{
var dataItem = e.Item as ListViewDataItem;
if (dataItem != null)
{
var parentID = ((BLL.Models.Account)dataItem.DataItem).AccountNumber;
var sqlParts = (ObjectDataSource)e.Item.FindControl("dataSourceParticipants");
if (sqlParts != null)
{
var parameterParentID = sqlParts.SelectParameters[0];
parameterParentID.DefaultValue = parentID;
}
}
}
}
这非常有效,重要的是要澄清这一行以上的所有内容都能100%运行,所有方法都完全符合我的要求。
我想更新我的 UpdateParticipantDetails 方法,如下所示:
public bool UpdateParticipantDetails(Participant participant, string accountNumber)
{
return ParticipantManager.UpdateParticipantDetails(participant, accountNumber, AccountManager);
}
我想将相同的 AccountNumber 属性传递给此方法,我将其用作 SelectParameters中 ControlParameter 的 PropertyName 上面。
我需要在 dataSourceParticipants 的HTML中添加什么才能将此新值传递给我的Update方法?
我试过这个:
<UpdateParameters>
<asp:ControlParameter ControlID="grdAccounts" Name="participant"/>
<asp:ControlParameter ControlID="grdAccounts" Name="accountNumber" PropertyName="SelectedDataKey.Values[AccountNumber]" Type="String"/>
</UpdateParameters>
Resharper给了我这个错误:
参数数量不正确
当我尝试更新时,我收到以下执行时间错误:
ObjectDataSource'DataSourceParticipants'找不到带有'PreScreening2.BLL.Models.Participant'类型参数的非泛型方法'UpdateParticipantDetails'。
由于