2011-04-27 4 views
1

사용자 지정 NewForm.aspx 및 New.aspx 및 편집이라는 사용자 지정 EditForm.aspx가있는 목록에서 작업하고 있습니다. aspx. 필자는 SharePoint 전문가와는 거리가 멀지 만 두 파일의 유일한 차이점은 파일 전체에서 설정되는 기타 ControlMode 특성입니다. Edit.aspxSharePoint 2007 목록의 사용자 지정 NewForm.aspx와 EditForm.aspx의 차이점

테스트로

에 대한 New.aspx 및 ControlMode이 = "편집"에 대한

ControlMode = "새로운"내 New.aspx의 코드를 가져다가 내 Edit.aspx로 복사 및 단지 ControlMode 속성을 'Edit'로 변경했습니다. 모든 것이 잘 작동하는 것 같습니다. 그래서 내가하고 싶은 것은 새로 만들기와 편집을 위해 별도의 파일 하나를 사용하는 것입니다. 나는 이것이 가능하다면 모르겠지만, 내가했다 첫 번째 단계는 XSL 변수를 만드는 것이 었습니다 :

<xsl:variable name="ControlMode" select="'Edit'" /> 

그런 다음 나는 같은 것을 할 수 있습니다

<xsl:choose> 
    <xsl:when test="$ControlMode = 'New'"> 
    <SharePoint:AttachmentUpload runat="server" ControlMode="New"/> 
    <SharePoint:ItemHiddenVersion runat="server" ControlMode="New"/> 
    </xsl:when> 
    <xsl:when test="$ControlMode = 'Edit'"> 
    <SharePoint:AttachmentUpload runat="server" ControlMode="Edit"/> 
    <SharePoint:ItemHiddenVersion runat="server" ControlMode="Edit"/> 
    </xsl:when> 
</xsl:choose> 

내 폼이 여전히 작동됩니다 이 시점에서 괜찮지 만 여전히 두 개의 다른 파일입니다. 그래서 문제는 누구나 xsl : 변수를 동적으로 채울 수있는 방법을 알고 있으므로 새 파일과 편집 모드에 대해 하나의 파일 만 지정할 수 있습니까?

미리 감사드립니다.

답변

1

내 자신의 질문에 대한 답변이 정확한 예의인지 아닌지는 잘 모르겠지만 내 대답은 ... 생각보다 훨씬 간단합니다.

Brian의 답변을 읽으면서 게시물을 편집하면 쿼리 문자열이 변경된다는 것이 나에게 발생했습니다. 물론 지정된 ID가 있습니다. 그래서 나는 쿼리 문자열을 파싱하는 가장 좋은 방법을 찾기 시작했다. 나는이 이미 ParameterBindings에 나를 위해 수행되는 것을 깨달았 때이다 :

<ParameterBinding Name="ListItemId" Location="QueryString(ID)" DefaultValue="0"/> 

XSL : PARAM 태그는 그러나 규정, 그래서 난 내 XSL의 정상이 추가되지 않았습니다 : 스타일 시트 :

<xsl:param name="ListItemId"></xsl:param> 
대신 내 원래의 게시물에서 만든 ControlMode 변수를 사용하는

다음, 나는 지금 ListItemID에 대해 직접 테스트 할 수 있습니다 : 기본적으로

<xsl:choose> 
    <xsl:when test="$ListItemId = '0' or not($ListItemId)"> 
    <SharePoint:AttachmentUpload runat="server" ControlMode="New"/> 
    <SharePoint:ItemHiddenVersion runat="server" ControlMode="New"/> 
    </xsl:when> 
    <xsl:otherwise> 
    <SharePoint:AttachmentUpload runat="server" ControlMode="Edit"/> 
    <SharePoint:ItemHiddenVersion runat="server" ControlMode="Edit"/> 
    </xsl:otherwise> 
</xsl:choose> 

, 난 그냥 (0 값에 대한 드를 확인 해요 ParameterBinding에 지정된 오류) 및 다른 컨트롤을 보여줍니다.

나는 오늘 오후에 약간 테스트를 해왔으며, 지금까지는 훌륭하게 작동합니다.

+0

2 개의 조건 대신 0을 >으로 변경했습니다. 그들이 -1을 공급한다면? –

+0

편집 링크가 목록 자체에서 생성되므로 -1의 대/소문자가 없어야합니다. 물론 누군가가 쿼리 문자열의 값을 수동으로 변경하지 않는 한 전적으로 가능합니다. 그러나 예, 논리를 뒤집고 0보다 큰 값을 확인하는 것이 더 이해하기 쉬우 며 읽기 쉽습니다. 감사! – SeanW

+0

와우 이것은 매우 흥미 롭습니다! 어떤 이유로 든 재사용 가능한 하나의 양식을 만드는 것에 대해 생각해 본 적이 없습니다 ... –

0

내장 된 셰어 포인트 컨트롤은 정의 된 컨트롤 모드에 따라 다르게 작동하려고 시도합니다. 분명히 그것이 편집되면, 그것은 단지 컨트롤을 렌더 할뿐만 아니라 그 컨트롤을 현재 값으로 채 웁니다. 모드가 새로운 경우 미리 정의 된 값없이 컨트롤을 렌더링합니다. 훨씬 더 많은 것이 있지만 그 개요입니다.

맞춤형 새 대 수정 양식을 사용하는 경우 개인적으로 조직 목적을 위해 별도로 보관해야합니다. 쉬운 해결책은 각 페이지 양식 내에 변수를 정의한 후에 XSL include를 사용하는 것입니다.

+0

감사합니다. 브라이언 - 나는 그들을 계속 유지하면서 앞뒤로 가고 있습니다. 그러나 지금 당장은 파일이 동일합니다. 나는 New.aspx와 Edit.aspx에서 전혀 다른 것을하지 않는다.내 희망은 xsl : 변수를 동적으로 변경할 수있게하는 것이 었습니다. 기존 항목을 편집했는지 또는 새 항목을 작성하는지에 따라 동적으로 변수를 변경할 수있었습니다. 난 그냥 querystring에서 ID의 존재를 확인할 수있을 것 같아서 ... – SeanW

+0

당신은 xsl 가져 오기를 통해 그것을 할 수 xsl 파일을 가져 오기 전에 변수를 선언합니다. –

관련 문제