11

だから、私は簡単な作業だと思ったことをやろうとしています...しかし私はどこにも行きません...私がしたいのは私のWebPartによってロードされたいくつかの.jsと.cssファイルを取得することです。VS2008+WSPBuilderを使用しています。私はこれについてたくさんググったが、まともな答えを見つけることができなかった。私が知りたいこと:

  • これらのファイルは、ディレクトリ構造のどこに配置する必要がありますか?(例:12 / TEMPLATE / OTHER?80 / wpresources / assembly_name?)

  • これらのファイルにアクセスするにはどうすればよいですか?(相対パスを使用しますか?何らかの方法でフルパスを取得しますか?)

  • そして最後に、これらのファイルをページに追加するにはどうすればよい<head>ですか?

よろしくお願いします。これらの質問で朝を過ごしてしまい、転職を考えています。;)

4

4 に答える 4

9

わかりました、2本のタバコとより効率的なグーグル検索の後で私は解決策を見つけました..これが私と同じ問題で誰かを助けることを願っています!

  • これらの追加ファイルの適切な場所は次のとおりです。12/TEMPLATE/LAYOUTS/1033/yourapp/

  • それらがこの場所にある場合、それらのファイルへのパスは/_layouts/1033/yourapp/yourjs.js

  • ページの先頭にJavaScriptファイルを追加する場合は、次のコードをCreateChildControls()メソッドに配置します。

    string scriptPath = "/_layouts/1033/yourapp/yourjs.js";
    if(!this.Page.ClientScript.IsClientScriptBlockRegistered(scriptPath))
    this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), scriptPath,
    "<script language=\"javascript\" src=\"" + scriptPath + "\">");
  • ページの先頭にCSSファイルを追加する場合は、次のコードをCreateChildControls()メソッドに配置します。

    CssLink cssLink = new CssLink();
    cssLink.DefaultUrl = "/_layouts/1033/yourapp/yourcss.css";
    this.Page.Header.Controls.Add(cssLink);

さて、あなたがこれが役に立ったことを願っています!

于 2010-03-11T17:13:14.373 に答える
2

リソースはwpresourcesフォルダーに配置する必要があります。

管理者がWebパーツをBINディレクトリにデプロイする場合、このフォルダは次のようになります。

http://server/site/wpresources/YourWebPart/

これは次のようなものにマッピングされます

C:\Inetpub\wwwroot\wss\VirtualDirectories\80\wpresources\YourWebPart

管理者がGACにデプロイする場合、

http://server/_wpresources/WebPartStrongName/

にマッピング

C:/Program Files/Common Files/Microsoft Shared/Web Server Extensions/wpresources/WebPartStrongName

実行時に必要なパスを見つけるには、WebPart.ClassResourcePathを使用する必要があります

したがって、コードを変更する

string scriptPath = this.ClassResourcePath + "/yourjs.js";
if(!this.Page.ClientScript.IsClientScriptBlockRegistered(scriptPath))
    this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), scriptPath,
"<script language=\"javascript\" src=\"" + scriptPath + "\">");

MSDN-クライアント側のスクリプトを使用したWebパーツの作成

于 2010-03-12T20:28:22.767 に答える
2

私はこれが古い投稿であることを知っていますが、これを行うためのより良い方法があります。この方法は、jsファイルとCSSファイルをプロジェクトに対してローカルに保つため、はるかに優れています。可能な限り12のハイブから離れることが最善であり、CSSファイルとjsファイルを追加することで可能であることがわかりました。

まず、JSファイルとCSSファイルをC#プロジェクトのトップレベルに配置するためのフォルダーを作成する必要があります。js/CSSファイルをこのフォルダーに配置します。

次に、jsファイルまたはCSSファイルを呼び出すConstants.csクラスを作成します。これがクラスのコードです。

using System;
using System.Collections.Generic;
using System.Text;

namespace myProjectSolution {

internal static class Constants
{
    public const string JQuerymyjavascriptFileJS = "myProjectSolution.Resources.myjavascriptFile.js";

public const string CSSPath = "myProjectSolution.Resources.CSSPath.css";
        }

}

コードでは、Resourcesフォルダーにリファーリングしていることに注意してください。これは、最初のステップで作成した追加のフォルダーです。それをあなたが望むものと呼んでください。

次の部分は、jsファイル/CSSへの参照をアセンブリに追加することです。

[assembly: WebResource(Constants.JQuerymyjavascriptFileJS, "text/javascript")]
[assembly: WebResource(Constants.CSSPath, "text/css")]

これが完了すると、WSPプロジェクトのメインC#クラスでjs/CSSを呼び出して使用する準備が整います。

protected override void OnLoad(EventArgs e)
    {

        base.OnLoad(e);
        this.EnsureChildControls();

        Page.ClientScript.RegisterClientScriptResource(this.GetType(), Constants.JQuerymyjavascriptFileJS);
               }

CSSファイルは少し異なります

ClientScriptManager csm = Page.ClientScript();

csm.RegisterClientScriptResourse(this.GetType(), Constants.CSSPath);

HtmlLink css = new HtmlLink();
css.Href = csm.GetWebResourceUrl(this.GetType(), Constants.CSSPath);
css.Attributes.Add("type", "text/css");
css.Attributes.Add("rel", "stylesheet");
Page.Header.Controls.Add(css);

これがjsおよびCSSファイルを呼び出すための最良かつ最も信頼できる方法であることがわかりました。これが、すべてのWebパーツのJavaScriptファイルとCSSファイルをロードする方法です。私はこの方法でそれを行うことに問題があったことはありません。これが問題を抱えている一部の人々に役立つことを願っています。SharePointは決して簡単なことではありません。:)

于 2011-07-15T14:10:15.550 に答える
1

lazoDevのソリューションを機能させるのにいくつかの問題があり(スペルエラー、参照の欠落、コーディングエラー)、ソリューションを共有したいと思いました。


ステップ1:「カレンダー」と呼ばれるWebパーツ

私のスタイルは次のようにStylesフォルダーにあります。ProjectName/Styles/

スクリプトはScriptsフォルダーにあります。ProjectName/Scripts/

using System.Web.UI.HtmlControls;

namespace ProjectName.Calendar
{
    internal static class Styles
    {
        public const string main = "ProjectName.Styles.main.css";
        public const string calendar = "ProjectName.Styles.calendar.css";
    }

    internal static class Scripts
    {
        public const string jqueryMin = "ProjectName.Scripts.jquery.min.js";
        public const string jqueryDatepicker = "ProjectName.Scripts.jquery.datepicker.js";
    }

    [ToolboxItemAttribute(false)]
    public class Calendar: WebPart
    {
        protected override void CreateChildControls()
        {
            // Adding Styles (also have to add to AssemblyInfo.cs, as well as changing the Build Action property of the file to embedded resource)
            HtmlLink css = new HtmlLink();
            css.Attributes.Add("type", "text/css");
            css.Attributes.Add("rel", "stylesheet");
            css.Href = Page.ClientScript.GetWebResourceUrl(this.GetType(), Styles.dailog);
            Page.Header.Controls.Add(css);

            HtmlLink css2 = new HtmlLink();
            css2.Attributes.Add("type", "text/css");
            css2.Attributes.Add("rel", "stylesheet");
            css2.Href = Page.ClientScript.GetWebResourceUrl(this.GetType(), Styles.calendar);
            Page.Header.Controls.Add(css2);

            // Adding Scripts (also have to add to AssemblyInfo.cs, as well as changing the Build Action property of the file to embedded resource)
            Page.ClientScript.RegisterClientScriptResource(this.GetType(), Scripts.jqueryMin);
            Page.ClientScript.RegisterClientScriptResource(this.GetType(), Scripts.jqueryDatepicker);
        }
    }
}


ステップ2:AssemblyInfo.cs

using ProjectName.Calendar;

// Styling
[assembly: WebResource(Styles.main, "text/css")]
[assembly: WebResource(Styles.calendar, "text/css")]

// Scripts 
[assembly: WebResource(Scripts.jqueryMin, "text/javascript")]
[assembly: WebResource(Scripts.jqueryDatepicker, "text/javascript")]


ステップ3:ファイルのプロパティ

各スクリプトおよびスタイルファイルのプロパティに移動し、の値をBuild Actionに変更しますEmbedded Resource

于 2013-07-24T20:37:53.417 に答える