所以,我正在努力做我认为是一项简单的任务...但我没有得到任何地方...... 我想要的是获取由我的WebPart加载的一些.js和.css文件。我正在使用VS2008 + WSPBuilder。我已经搜索了很多关于这一点,但我找不到一个体面的答案。 我想知道的是:
我应该在目录结构中放置那些文件? (例如12 / TEMPLATE / OTHER?80 / wpresources / assembly_name?)
如何访问这些文件? (使用相对路径?通过某种方法获取完整路径?)
最后,如何将这些文件添加到页面的<head>
?
提前致谢..我在这些问题中失去了所有的早晨,我正在考虑改变职业生涯! ;)
答案 0 :(得分:9)
好的,经过两次卷烟和更高效的谷歌搜索,我找到了解决方案。希望这能帮助遇到与我同样麻烦的人!
这些额外文件的正确位置位于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);
嗯,希望你发现这有用了!
答案 1 :(得分: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 + "\">");
答案 2 :(得分: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永远不会变得简单。 :)
答案 3 :(得分:1)
我在使用lazoDev的解决方案时遇到了一些问题(拼写错误,缺少引用,以及编码错误)并且认为我会分享我的解决方案。
我的样式位于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);
}
}
}
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")]
转到每个脚本和样式文件的属性,并将Build Action
的值更改为Embedded Resource
。