Я написал класс, который содержит методы выбора и обновления для ObjectDataSource. UpdateMethod получает экземпляр вызываемого класса. Моя проблема в том, что установлены только те свойства, которые связаны в DetailsView, остальные имеют значение по умолчанию.
Вот мой код:
Объявление класса :
public class Foo
{
public string Prop1 {get;set:}
public int Prop2 {get;set;}
}
Updatemethod :
[DataObjectMethod(DataObjectMethodType.Update)]
public static void UpdateQuicklink(Foo item)
{
// item.Prop1 // contains correct value
// item.Prop2 // is 0
}
Разметка
<asp:DetailsView ID="DetailsView1" runat="server"
DataSourceID="ods" EnableModelValidation="True" AutoGenerateInsertButton="True"
AutoGenerateRows="False" AutoGenerateEditButton="True">
<Fields>
<asp:BoundField DataField="Prop1"/>
<asp:BoundField DataField="Prop2" Visible="false"/>
</Fields>
</asp:DetailsView>
<asp:ObjectDataSource ID="ods" runat="server"
TypeName="NamespaceToClassContaingUpdateMethod"
OldValuesParameterFormatString="original_{0}"
DataObjectTypeName="NamespaceToFoo"
UpdateMethod="UpdateQuicklink">
</asp:ObjectDataSource>
Я не могу выставить все поля, которые мне нужны, в разметке.
Возможным решением было бы переписать мой UpdateMethod, чтобы принять все необходимые параметры, например:
[DataObjectMethod(DataObjectMethodType.Update)]
public static void UpdateQuicklink(string Prop1, int Prop2)
{
}
Но это решение - дерьмо, из-за того, что оно недостаточно гибкое, если я пытаюсь внести изменения в базовую структуру данных. Я знаю, что в этом случае мне, тем не менее, придется редактировать свой код, но в качестве параметра у меня будет только мой собственный класс-обертка. Это возможно?