[OK]をクリックします。これは大きなものです。私は問題を説明しようとしますが、もっと情報が必要な場合はお知らせください。SharePoint 2010 >>出力HTMLの編集>>ページまたはマスターページのレンダリングに関する問題
SharePoint 2010が生成するHTMLを変更したいと思います。 私は他のオブジェクトの中でHTMLの文字列を取り、ソースを変更するHTMLアジリティ・パックを使用します。
SPには完全なソースを変更する2つの方法があります。
- コントロールを使用するコントロール、コントロールを拡張するページ、マスターページ、またはContentPlaceHolderのレンダリングメソッドにアクセスして、HTMLを取得し、変更してから書き込むことができます。
- は、フィルタとHTTPモジュールを使用して出力ストリーム
を変更する残念ながら、これらの方法の両方に問題があります。
2番のフィルタはうまく機能しますが、出力キャッシュを無効にする必要があります。 私はこれを行うことはできません。私のブランドサイトには大量のトラフィックがあります。 したがって、SharePoint 2010チームが回避策を提案/提示するまで、フィルタは問題になります。私は彼らのことを知っている旅行のどこかで読んで、それについて何かしています。
1は素晴らしいです。私は単純に以下を使用し、ページのHTMLを変更できますが、大きな問題が1つあります。
HtmlDocument hd = new HtmlDocument(); //Agility HTML Object.
StringBuilder sb = new StringBuilder();
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);
//Render Object into HtmlTextWriter
base.Render(htw);
//String to hold the HTML from the StringBuilder of the HtmlTextWriter
string html = sb.ToString();
//Mess with the String here using the Agility HTML Pack
//Write the HTML to the writer
writer.Write(html);
//Done!
このコードはうまくいきますが、SharePoint 2010では、ページ/マスターページのレンダーオーバーライド後にデータをライターに追加したり、コントロールを変更したりしています。
私がデバッグしてウォークスルーしてhtml文字列を見ると、次のようになります。
"<html .... ....</html>"
これは、最初のHTMLタグの前には何もないので注意することが重要です。オープニング "<"は0の位置にあります。
しかし、HTMLがブラウザで終わると、次のようになります。
DOMAIN\user<script type="text/javascript">
//<![CDATA[
var _spUserId=1;
//]]>
</script>
<html...
....</html>
また、リボンの右上のウェルカムエリアにユーザー名が表示されません。これは、リボンの開始タグの前に配置されているためです。
レンダオーバーライドでライターオブジェクトに何も割り当てないと、ブラウザのページにHTMLタグの前のすべてが表示されます。面白いことは何も表示すべきではないということです!
他のページにアクセスした場合。リストビューを持つ任意のページ。すべての項目はタグの前にレンダリングされます。 htmlではなく、単なる値であることに注意することが重要です。リスト項目のHTMLは、リストビューのどこに表示されるべきかが決まります。
たとえば、 (ページは "/_layouts/viewlsts.aspx")
レンダオーバーライドなし。
<html...
...
//The Table where the data should be.
<tr>
<td class="ms-gb" colspan="5" style="white-space:nowrap;">
<h3 class="ms-standardheader">
  Picture Libraries
</h3>
</td>
</tr>
<tr><td class="ms-vb2 ms-viewlsts-noitems" colspan="6">
There are no picture libraries. To create one, click <b>Create</b> above.
</td></tr>
<tr>
<td class="ms-gb" colspan="5" style="white-space:nowrap;">
<h3 class="ms-standardheader">
  Lists
</h3>
</td>
</tr>
<tr><td class="ms-vb2 ms-viewlsts-noitems" colspan="6">
There are no lists. To create one, click <b>Create</b> above.
</td></tr>
<tr>
<td class="ms-gb" colspan="5" style="white-space:nowrap;">
<h3 class="ms-standardheader">
  Discussion Boards
</h3>
</td>
</tr>
<tr class="ms-alternatingstrong">
<td class="ms-vb-icon">
<a id="viewlistDiscussionBoard" href="/Lists/Discussion%20Board/AllItems.aspx" >
<img border="0" alt="Discussion Board" src="/_layouts/images/itdisc.png" width="16" height="16" /></a>
</td>
<td class="ms-vb2" >
<a id="viewlistDiscussionBoard" href="/Lists/Discussion%20Board/AllItems.aspx">Discussion Board</a> 
</td>
<td class="ms-vb2" width="40%" >
 
</td>
<td class="ms-vb2" width="3%" align="right">
1
</td>
<td class="ms-vb2" width="25%" >
<nobr>
3 days ago
</nobr>
</td>
</tr>
...</html>
レンダオーバーライドを使用します。
DOMAIN\user<script type="text/javascript">
//<![CDATA[
var _spUserId=1;
//]]>
</script>Document Libraries"viewlistDocumentLibrary""/AnalyticsReports/Forms/AllItems.aspx""Customized Reports""/_layouts/images/itdl.png""viewlistDocumentLibrary""/AnalyticsReports/Forms/AllItems.aspx"Customized ReportsThis Document library has the templates to create Web Analytics custom reports for this site collection04 days ago"viewlistDocumentLibrary""/Style%20Library/Forms/AllItems.aspx""Style Library""/_layouts/images/itdl.png""viewlistDocumentLibrary""/Style%20Library/Forms/AllItems.aspx"Style LibraryUse the style library to store style sheets, such as CSS or XSL files. The style sheets in this gallery can be used by this site or any of its subsites.04 days agoPicture LibrariesThere are no picture libraries. To create one, click <b>Create</b> above.ListsThere are no lists. To create one, click <b>Create</b> above.Discussion Boards"viewlistDiscussionBoard""/Lists/Discussion%20Board/AllItems.aspx""Discussion Board""/_layouts/images/itdisc.png""viewlistDiscussionBoard""/Lists/Discussion%20Board/AllItems.aspx"Discussion Board13 days agoSurveysThere are no surveys. To create one, click <b>Create</b> above.Blog0
<html...
//The Table where the data should be.
...
<tr>
<td class="ms-gb" colspan="5" style="white-space:nowrap;">
<h3 class="ms-standardheader">
 
</h3>
</td>
</tr>
<tr><td class="ms-vb2 ms-viewlsts-noitems" colspan="6">
</td></tr>
<tr>
<td class="ms-gb" colspan="5" style="white-space:nowrap;">
<h3 class="ms-standardheader">
 
</h3>
</td>
</tr>
<tr class="ms-alternatingstrong">
<td class="ms-vb-icon">
<a id= href= >
<img border="0" alt= src= width="16" height="16" /></a>
</td>
<td class="ms-vb2" >
<a id= href=></a> 
</td>
<td class="ms-vb2" width="40%" >
 
</td>
<td class="ms-vb2" width="3%" align="right">
</td>
<td class="ms-vb2" width="25%" >
<nobr>
</nobr>
</td>
</tr>
... </html>
私の推測では、それがページまたはマスターページは、メソッドをレンダリングした後、それはオブジェクトの操作のいくつかの並べ替えがあることは明らかだいずれにせよ...
をリソースファイルとは何かを持っています。私はそれを見つけることができません。
HTTPモジュールのフィルタストリームに適切な場所にHTMLがあります。 ページ間のどこかでレンダリングし、HTMLをブラウザに送信すると、何か問題が発生しています。
ここには、同じ問題を何も役に立たないと回答している人が2人います。
私はこの上の任意の洞察力をいただければ幸いです!ありがとう!
こんにちはTommmy、この問題の解決策を見つけましたか? – Serhiy