好的,所以我正在使用 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”。
谢谢