【发布时间】:2010-03-26 15:09:04
【问题描述】:
我编写了一个类,其中包含 ObjectDataSource 的 Select- 和 Update-Methods。 UpdateMethod 接收一个被调用类的实例。我的问题是,只设置了DetailsView中绑定的属性,其他的都有默认值。
这是我的代码:
类声明:
public class Foo
{
public string Prop1 {get;set:}
public int Prop2 {get;set;}
}
更新方法:
[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)
{
}
但是这个解决方案很糟糕,因为如果我尝试更改底层数据结构,它不够灵活。我知道在那种情况下我仍然必须编辑我的代码,但我只会将我的自定义包装类作为参数。这可能吗?
【问题讨论】:
-
只是为了确保我是否正确理解了这个问题:您说“仅设置了 DetailsView 中绑定的属性,其他属性具有默认值”但在您的标记示例中
Prop2IS实际上绑定,它只是不可见。您的问题现在是否出现在真正未绑定(根本不存在于标记中)或已绑定但不可见的属性? -
只有绑定到可见控件的值才能正确设置。切换到 Visible="true" 会导致正确设置 prop2
标签: c# asp.net objectdatasource detailsview