2012-11-14 51 views
1

我試圖在SharePoint 2010中的aspx頁面中使用C#代碼。我不斷收到「代碼塊不允許」錯誤。SharePoint 2010允許特定頁面的代碼塊

位於(服務器)/SitePages/ajax.aspx我的aspx頁面:(SharePoint Designer 2010中編輯,如果它事項)

<%@ Page Language="C#" %> 
<script runat="server"> 
    Response.Write("Hello world"); 
</script> 

我說在C以下到web.config中:\ Program Files文件\ Common Files文件\ Microsoft共享\ Web服務器Extensions \ 14 \ CONFIG

<PageParserPath VirtualPath="/SitePages/ajax.aspx" CompilationMode="Always" AllowServerSideScript="true" /> 

在這裏,在上下文中顯示,我加入​​到web.config中的同一行:

<SharePoint> 
    <SafeMode 
     MaxControls = "200" 
     CallStack = "false" 
     DirectFileDependencies ="10" 
     TotalFileDependencies = "50" 
     AllowPageLevelTrace = "false" 
     > 
     <PageParserPaths> 
      <PageParserPath VirtualPath="/SitePages/ajax.aspx" CompilationMode="Always" AllowServerSideScript="true" /> 
     </PageParserPaths> 

爲什麼我仍然得到「代碼塊」錯誤?是否有另一個安全開關?

(我知道自定義Web部件是首選的解決方案,但我不認爲這會在這裏就夠了,因爲返回值應該是JSON - 這是一個頁面通過Ajax獲得的數據命中。)

回答

0

我想,你必須在位於C:\ inetpub \ wwwroot \ wss \ VirtualDirectories [application folder] \ web.config的Web應用程序web.config中定義PageParserPath元素。

0

當您將aspx頁面上載到文檔庫時(這是您在使用SharePoint Designer時所做的)aspx頁面不能包含內聯代碼塊並且不能有代碼隱藏。這主要是一種安全機制。它可以防止任何舊用戶上傳帶有惡意內容的aspx頁面,這些惡意內容將隨後在您的服務器上以完全權限執行,並向(可能)任何用戶提供內容。

對於執行代碼的aspx頁面,它需要編譯到WSP中並部署到服務器上的GAC。當你這樣做時,你可以使用內聯代碼塊,或者更好的是,有一個代碼隱藏的aspx頁面。要將該頁面發佈到網站,您需要將Visual Studio中的項目編譯爲WSP,通過以足夠的權限登錄到計算機來將其部署到服務器,然後添加和部署代碼。這可確保非開發人員無法將可執行代碼上傳到您的網站。最後,在一個更加不相干的筆記上,既然你實際上並不想顯示一個頁面,但只是JSON內容,你可能根本不應該使用一個aspx頁面(儘管你可以使用可以)。你應該創建一個HTTP處理程序或者一個Web服務來寫出適當的內容。

+0

這當然是最佳做法的答案,但它是可能的(見德米特里的答案) – user1472408