2011-02-01 4 views
0

SharePoint 웹 컨트롤 LookupField 컨트롤을 사용하여 드롭 다운 목록을 표시하는 VS2010 (LayoutsPageBase에서 상속)에서 간단한 aspx 페이지로 사용자 지정 편집 양식을 만들었습니다. 값SharePoint 2010 웹 컨트롤 - 포스트 백에 LookupField 값이 설정되지 않음

ControlMode이 (내가 시도하지만 명시 적으로 편집 설정)을 FormContext와 동일로 설정의 예상 범위를 포함하는 드롭 다운 상자와

양식 제대로 표시 사용자 정의 형식의 값

그러나 포스트 백에서 드롭 다운 목록의 값이 설정되지 않았습니다. - 선택한 항목 인덱스가 -1로 설정되었습니다.

LookupField 컨트롤을 사용하여 사용자가 선택한 값을 올바르게 캡처하는 방법은 무엇입니까?

aspx에서 컨트롤 declaritivly를 추가 한 다음 페이지로드 이벤트의 SPContext에서 목록 ID 등을 설정했기 때문일 수 있습니까? - 아래 코드를 참조 (안 예쁜하지만 그냥이 시점에서 작업을 얻으려고 노력) 다음에

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

....

: 영문에서

페이지로드 뒤에 코드 :

if (!IsPostBack) 
      { 
       SPItem feedFileItem = SPContext.Current.Item; 
       FileNameText.ControlMode = SPContext.Current.FormContext.FormMode; 
       FileNameText.ListId = SPContext.Current.ListId; 
       FileNameText.ItemId = SPContext.Current.ItemId; 
       FileNameText.FieldName = "Name"; 

       FeedType.ControlMode = SPControlMode.Edit; 

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

       FeedStatus.ItemContext = SPContext.Current; 
       FeedStatus.RenderContext = SPContext.Current; 
       FeedStatus.ControlMode = SPControlMode.Edit; 
       FeedStatus.ListId = SPContext.Current.ListId; 
       FeedStatus.ItemId = SPContext.Current.ItemId; 
       FeedStatus.FieldName = "FeedStatus"; 
      } 

UPDATE

좋아요. CreateChildControls 재정의에서 컨트롤 뒤에 코드를 추가하여 양식을 가져올 수있었습니다. 이는 인터넷에서 본 대부분의 샘플과 일치합니다.

하지만 누군가가 내 접근 방식이 작동하지 않는 이유와 내가 이것을 aspx의 선언적 방식으로 모두 할 수 있는지 설명 할 수 있습니까?

+0

포스트 백과 같은 소리는 목록을 다시 바인딩하는 코드를 게시 할 수 있습니까? – djeeg

+0

예제 코드 추가 – Richard

답변

2

목록 컨트롤에서 채워지지 않은 값은 목록에서 선택한 값이 무시됩니다. 따라서 항목 2를 선택하고 목록 항목이 null 인 경우 응답 매개 변수를 무시하고 Value 속성을 설정하지 않습니다. 이는 ProcessPostData가 LoadData보다 먼저 발생하기 때문입니다. LoadData 메서드에서! IsPostBack을 제거하더라도 LoadPadData가 여전히 발생하고 포스트 백을 처리하기 전에 목록을로드하지 않았으므로 여전히 작동하지 않습니다.

이 간단한 문제를 해결하는 방법은 초기화 코드를 응용 프로그램 페이지의 EnsureChildControls 메서드로 옮기는 것입니다.

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

    ... 
    FeedType.ControlMode = SPControlMode.Edit; 

    FeedType.ListId = SPContext.Current.ListId; 
    FeedType.ItemId = SPContext.Current.ItemId; 
    FeedType.FieldName = "FeedType"; 
    ... 
} 
관련 문제