SharePoint 2010 Web控件-回发时未设置查找字段值

SharePoint 2010 Web控件-回发时未设置查找字段值,sharepoint,sharepoint-2010,Sharepoint,Sharepoint 2010,我在VS2010(继承自LayoutsPageBase)中创建了一个自定义编辑表单作为一个简单的aspx页面,它使用SharePoint Web控件LookupField控件显示自定义类型的值的下拉列表 表单正确显示,下拉框包含预期的值范围 ControlMode设置为与FormContext相同(尽管我已尝试显式地将其设置为Edit) 但是在回发时,下拉列表的值没有设置-所选项目索引设置为-1 如何正确使用LookupField控件从用户捕获选定值 这可能是因为我正在aspx中以去极化方式添加

我在VS2010(继承自LayoutsPageBase)中创建了一个自定义编辑表单作为一个简单的aspx页面,它使用SharePoint Web控件LookupField控件显示自定义类型的值的下拉列表

表单正确显示,下拉框包含预期的值范围

ControlMode设置为与FormContext相同(尽管我已尝试显式地将其设置为Edit)

但是在回发时,下拉列表的值没有设置-所选项目索引设置为-1

如何正确使用LookupField控件从用户捕获选定值

这可能是因为我正在aspx中以去极化方式添加控件,然后在页面加载事件中从SPContext设置列表id等吗?-请参阅下面的代码片段(不是最漂亮的,但只是尝试在此时使其工作):

从aspx:

<SharePoint:FileField ID="FileNameText"  InputFieldLabel="Name" runat="server" ControlMode="Display"/><br />
<SharePoint:LookupField ID="FeedType" runat="server" />
<SharePoint:TextField ID="FeedStatus" runat="server"  />

更新

好的,我通过在CreateChildControls的重写中添加代码中的控件来实现表单的工作,这与我在网上看到的大多数示例是一致的


但是,有人能解释一下为什么我的方法不起作用,以及我是否可以在aspx中以声明的方式完成这一切吗?

在回发过程中,如果列表控件未填充,则只会忽略列表中选定的值。因此,如果您选择项2,并且列表项为null,那么它将忽略响应参数,而不设置Value属性。这是因为ProcessPostData发生在LoadData之前。即使你将要删除该文件!在LoadData方法上的IsPostBack仍然不起作用,因为ProcessPostData仍然出现在LoadData之前,并且您在处理回发之前没有加载列表

解决此问题的一个简单方法是将初始化代码移动到应用程序页面的EnsureChildControl方法中

protected override void EnsureChildControls()
{
    base.EnsureChildControls();

    ...
    FeedType.ControlMode = SPControlMode.Edit;

    FeedType.ListId = SPContext.Current.ListId;
    FeedType.ItemId = SPContext.Current.ItemId;
    FeedType.FieldName = "FeedType";  
    ...
}

听起来回发是在重新绑定列表,你能发布代码吗?
protected override void EnsureChildControls()
{
    base.EnsureChildControls();

    ...
    FeedType.ControlMode = SPControlMode.Edit;

    FeedType.ListId = SPContext.Current.ListId;
    FeedType.ItemId = SPContext.Current.ItemId;
    FeedType.FieldName = "FeedType";  
    ...
}