视图xsl定制之嵌入服务器控件

SharePoint 2010 视图 xsl 文件中支持嵌入服务器控件,嵌入服务器控件时,系统先采用xsl将视图xml解析成一个类似UserControl的存在,然后执行UserControl。

代码示例如下:

<xsl:stylesheet xmlns:x="http://www.w3.org/2001/XMLSchema" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" version="1.0" exclude-result-prefixes="xsl msxsl ddwrt" xmlns:ddwrt="http://schemas.microsoft.com/WebParts/v2/DataView/runtime"
                xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:codeart="CodeArt.SharePoint.SmartQuery"   xmlns:ddwrt2="urn:frontpage:internal">
  <xsl:output method="html" indent="no" encoding="uft-8" />
  <xsl:include href="/_layouts/xsl/main.xsl" />
  <xsl:include href="/_layouts/xsl/internal.xsl" />
  <xsl:decimal-format NaN="" />
  <xsl:template match="/" xmlns:aa="System.Web.UI">
    <xsl:value-of disable-output-escaping="yes" select="‘<%@ Register Tagprefix="codeart" Namespace="CodeArt.SharePoint.SmartQuery" Assembly="CodeArt.SharePoint.SmartQuery, Version=1.0.0.0, Culture=neutral, PublicKeyToken=df96d56002e5fe16" %>‘"/>

    <hr />
    <codeart:XXXWebPart runat="server"/>
    <hr />
    <xsl:apply-templates mode="RootTemplate" select="$XmlDefinition" />
    <hr/>
  </xsl:template>
  <xsl:template name="FieldRef_header.ZhuanYe" match="FieldRef[@Name=‘ZhuanYe‘]" mode="header">
    <th nowrap="" scope="col" onmouseover="OnChildColumn(this)" class="ms-vh2">
      <div class="ms-vh-div">
        <xsl:copy-of select="current()" />
        专业
        <xsl:value-of select="@DisplayName"/>
      </div>
    </th>
  </xsl:template>
</xsl:stylesheet>

需要注意的是:

并不是所有服务器控件都是可以嵌入xsl的,控件必须继承于WebControl,而不能只继承Control。原因:

XsltListViewWebPart解析xsl时,嵌入的控件解析成UserControl后,会增加额外的属性,如:

<hr xmlns:aa="System.Web.UI" xmlns:ddwrt2="urn:frontpage:internal" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:asp="http://schemas.microsoft.com/ASPNET/20" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" xmlns:x="http://www.w3.org/2001/XMLSchema"、><asp:UpdatePanel runat="server" xmlns:asp="http://schemas.microsoft.com/ASPNET/20"><ContentTemplate><asp:Calendar runat="server" xmlns:aa="System.Web.UI" xmlns:ddwrt2="urn:frontpage:internal" xmlns:SharePoint="Microsoft.SharePoint.WebControls" xmlns:__designer="http://schemas.microsoft.com/WebParts/v2/DataView/designer" xmlns:d="http://schemas.microsoft.com/sharepoint/dsp" xmlns:x="http://www.w3.org/2001/XMLSchema" /></ContentTemplate></asp:UpdatePanel>

这些强制加入的名称控件属性显然不是标准的控件属性,而Control没有实现IAttributeAccessor, 不能任意增加自定义属性,所以会出错,WebControl实现了IAttributeAccessor接口,可以增加任意属性,所有不会出错,以上示例代码中嵌入了UpdatePanel,UpdatePanel直接继承Control,所以会出差。错误信息一般为:

分析器错误
说明: 在分析向此请求提供服务所需资源时出错。请检查下列特定分析错误详细信息并适当地修改源文件。
分析器错误消息: 类型“xxx”不具有名为“xmlns:asp”的公共属性。

  

视图xsl定制之嵌入服务器控件

时间: 2024-10-17 12:53:33

视图xsl定制之嵌入服务器控件的相关文章

2.MVC框架开发(视图开发----基础语法)

1.区别普通的html,在普通的html中不能将控制器里面的数据展示在html中. 在MVC框架中,它提供了一种视图模板(就是结合普通的html标签并能将控制器里传出来的数据进行显示) 视图模板特性:他有自己的一套语法规则去显示数据 在ASP.NET中的页面里,通过<%    %>格式来嵌入C#语言的 在MVC框架里视图也是需要嵌入C#语言的,在MVC3.0以后统一都是Razor视图引擎(模板),以@符号开始进行C#语言编写 2.Razor视图语法 以@符号开始,如果是一段程序代码,那么就用{

关于 ASP.NET MVC 中的视图生成

在 ASP.NET MVC 中,我们将前端的呈现划分为三个独立的部分来实现,Controller 用来控制用户的操作,View 用来控制呈现的内容,Model 用来表示处理的数据. 从控制器到视图 通常,在 Controller 中,我们定义多个 Action ,每个 Action 的返回类型一般是 ActionResult,在 Action 处理的最后,我们返回对于视图的调用. public ActionResult Index() { return this.View(); } 默认情况下,

ASP.NET MVC 控制器与视图

一.控制器相关 在Controller类中方法访问级别为public的方法,就是行为(Action).如果不希望Controller类中的方法成为Action(可以在地址栏中被访问),有两种实现方式:将方法的访问级别设置为private在方法上添加特性标记[NonAction] 诸如新增\修改等功能模块,我们往往会创建2个名称相同的Action:一个action用于加载新增\修改页面;另一个action用于处理新增\修改页面提交的表单数据.那么如何区分在何时调用哪个action呢? 我们将加载新

UIView你知道多少

转载自:http://www.cnblogs.com/likwo/archive/2011/06/18/2084192.html 曾经有人这么说过,在iphone里你看到的,摸到的,都是UIView,所以UIView在iphone开发里具有非常重要的作用.那么UIView我们到底知道多少呢.请看看下面的问题, 如果这些你都知道,那么本文章的内容就请绕道,如果你还不太清楚,我想看了下面的内容,你就明白了. 1.bounds和frame分别表示什么? 2.ContentMode里UIViewCont

Django Book

The Django Book 2.0--中文版 第一章:介绍Django 本书所讲的是Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django,使你能够以最小的代价构建和维护高质量的Web应用. 从好的方面来看,Web 开发激动人心且富于创造性:从另一面来看,它却是份繁琐而令人生厌的工作. 通过减少重复的代码,Django 使你能够专注于 Web 应用上有 趣的关键性的东西. 为了达到这个目标,Django 提供了通用Web开发模式的高度抽象,提供了频繁进行的编程

关于UIView(转)

曾经有人这么说过,在iphone里你看到的,摸到的,都是UIView,所以UIView在iphone开发里具有非常重要的作用.那么UIView我们到底知道多少呢.请看看下面的问题, 如果这些你都知道,那么本文章的内容就请绕道,如果你还不太清楚,我想看了下面的内容,你就明白了. 1.bounds和frame分别表示什么? 2.ContentMode里UIViewContentModeScaleToFill代表什么? 3.contentStretch 里的指定UIView里缩放区域是如何计算的? 4

UIView的理解 [转]

[转载] 原文地址 :http://blog.csdn.net/itianyi/article/details/8982518 UIView是开发中使用得最多的控件了,深入的理解很有必要. UIView是组成画面的基本元素, NS_CLASS_AVAILABLE_IOS(2_0)@interface UIView :UIResponder<NSCoding,UIAppearance, UIAppearanceContainer> { @package CALayer        *_laye

UI学习笔记---第八天

UINavigationController的用法   界面间传值 UInavigationController继承于UIViewController,以栈的方式管理所控制的师徒控制器,至少要有一个被管理的视图控制器 创建的时候需要用户提供一个视图控制器作为导航控制器的一个根视图控制器 出栈和人栈 UINavigationController通过控制入栈和出栈来展示各个视图控制器 视图控制器切换常用方法 pushViewController:animated //进?下一个视图控制器 popVi

UIView的layout(布局)与draw(绘图)

UIViewdrawlayout 一.视图的运行时交互模型 当用户和界面进行交互时,或者由代码程序性的改变一些东西时,一系列复杂的事件就会发生在UIKit的内部来处理这些交互.在这个系列中的某些点,UIKit唤出你的视图类,同时给它们一个机会去响应程序的行为.理解这些唤出点对于理解视图在哪里融入系统很重要.图 1-7 展示了这些事件的基本序列,从用户触屏开始到图形系统更新屏幕内容来响应结束.同样的事件序列也会发生在任何程序性启动的动作. 以下的步骤分解了图1-7中的事件序列,既解释了在每一步发生