请原谅,如果有更好的方法,我不太熟悉SharePoint Web部件,我现在才开始创建它们。
我想要做的是拥有一个Web部件,我可以将其放入页面,给它一个参数,然后Web部件使用所述参数进行API调用,进行一些XSL转换,并吐出HTML我想在页面上显示。在我看来,它似乎是一个简单的小网页部分,我只是想确保这是最好的方式去做,而不是重复已经存在的东西。
我已经完成了这个creating a basic web part演练,我想我可以使用web部件属性从用户那里获取参数。我怎么能让它输出HTML呢?我改变了“你好,世界!”文本输出一些HTML,它似乎已被删除?
非常感谢,如果有什么看似noob-ish的话,对不起!
答案 0 :(得分:1)
从我看到的,你想要做的事情有两个主要部分。
有很多方法可以做到这一点,但我将概述我认为最快和最简单的方法。
将您的参数放入查询
在SharePoint 2010中,SharePoint设计器为此提供了一些很好的选择。 因此,第1步是在SharePoint Designer中打开网页。 单击“插入”选项卡,然后单击“数据视图”下拉列表,并选择要从中获取数据的列表。
现在单击Options选项卡,然后单击Parameters
该对话框显示了一些将信息提取到查询中的选项。
查询字符串参数易于使用。服务器变量也非常方便。
对于我们的示例,我们将选择查询字符串并将默认值设置为1(这将是我们想要检索的项目的ID)。由于我们已将此设置为默认值,即使查询字符串为空,我们仍会在参数中获取默认值。
然后点击过滤器。
我们将Field Criteria设置为使用我们刚刚制作的参数。
现在,您可以将页面保存在SharePoint Designer中并测试结果。很快。
使用一些HTML格式化结果
在SharePoint中,XSLT是将您自己的HTML放在您从SharePoint检索到的某些数据的最佳方式。
另外,为了在查询中获取参数,我们可以使用参数绑定添加它:
如果您是XSL新手,那么这里是最好的xsl工具:
http://spexp-blog-files.s3.amazonaws.com/blog/files/spe-magic-data-view-builder.xsl
要使用魔术数据视图构建器,请将此文件保存到服务器场中的documetn库。
如果您希望集中XSL模板以获得更好的重用(强烈推荐),您可以将各个XSL文件放在一个中央位置进行存储。在WSS或SharePoint Foundation环境中,我建议您在网站集的根网站中使用文档库。在MOSS或SharePoint Server 2010环境中,我建议将XSL文件放在/ Style Library / XSL样式表位置,因为这是SharePoint默认存储其XSL的位置。
然后将URL粘贴到XSL链接中以替换main.xsl并将Default更改为FALSE。当您在Designer中查看webpart时,此属性位于<XmlDefinition>
标记的末尾附近。
... <XslLink Default="TRUE">main.xsl</XslLink><Toolbar Type="Standard"/></View></XmlDefinition>
从那里,您可以保存页面,魔术数据视图构建器中的XSL向导将引导您创建自己的xsl以输出您的html。
重新使用您的Webpart
要重复使用,请点击保存&#34;到网站库&#34;当您的光标位于SharePoint Designer中的wepart上时。这将把webpart保存到&#34; Custom&#34;下的画廊中。组。从那里,您可以将webpart插入其他页面,就像开箱即用的webparts一样。
答案 1 :(得分:0)
我认为我们需要更多关于您尝试获取Web部件的信息。如果使用SharePoint数据视图Web部件,则可以将其指向数据源,编写一些XSL以转换数据,以便按照您希望的方式将HTML输出到页面。例如,假设我有一个培训课程的SharePoint列表。我可以创建一个数据视图Web部件,它将查询字符串或其他输入参数作为其过滤器,并过滤类列表,以显示与我的查询字符串或输入参数的ID匹配的类。然后我可以格式化我的XSL以输出有关我想要的任何花哨的HTML呈现的类的详细信息。
这有帮助吗?
答案 2 :(得分:0)
“我更改了”Hello,world!“文本以输出一些HTML而且似乎 被剥夺了?“
请注意,在您的示例中,它使用LiteralControl(),默认情况下,HTML Escapes任何文本。因此,如果您需要通过LiteralControl.Text元素输出HTML,则需要将Mode设置为“Passthrough”。
protected override void CreateChildControls()
{
base.CreateChildControls();
LiteralControl message = new LiteralControl();
// !! add this !!
message.Mode = LiteralMode.PassThrough;
message.Text = DisplayMessage; // <-- containing HTML
Controls.Add(message);
}