设置 FieldRenderer 的 Item 或 DataSource 属性的好方法是什么?

2024-04-05

场景是我有很多 FieldRenderer。这些应该从不同的地方输出数据,一些来自项目 X,另一些来自项目 Y。并且应该输出项目 Z 的属性。

假设我有公共财产ItemX我想从中输出一个属性,以下任何一个都可以。但我没有得到他们中任何一个的输出:

<sc:FieldRenderer runat="server" FieldName="Logo" DataSource="<%# ItemX %>" />
<sc:FieldRenderer runat="server" FieldName="Logo" DataSource="<%= ItemX.Paths.FullPath %>" />
<sc:FieldRenderer runat="server" FieldName="Logo" Item="<%# ItemX %>" />
<sc:FieldRenderer runat="server" FieldName="Logo" Item-ID="<%# ItemX.ID %>" />
<sc:FieldRenderer runat="server" FieldName="Logo" Item-ID-Guid="<%# ItemX.ID.Guid %>" />

如果我添加一个IDMyFieldRenderer对其进行下面的丑陋的部分,我得到正确的输出:

MyFieldRenderer.Item = ItemX;

一定有更好的方法来做到这一点吗?我不确定这是 Sitecore 特定问题还是 WebForms 问题。


如果不使用隐藏代码,则无法将 FieldRenderer 的数据源设置为服务器端对象。这是 WebForms 工作方式的结果。该问题描述于微软知识库文章 http://support.microsoft.com/kb/976112:

显示表达式相当于仅包含 Response.Write(...) 语句的嵌入代码块。这是显示单个字符串、int 变量或常量等信息的最简单方法。 [...]请记住,显示表达式不能在服务器控件的属性中使用。这是因为 .NET Framework 直接编译整个表达式,而不是将显示内容作为属性的值。

换句话说,.NET 想要编译 sc:FieldRenderer,因此无权访问 的运行时内容。您可以通过尝试显示以下内容以更简单的形式查看此问题:

<asp:TextBox runat="server" Text="<%= DateTime.Now.ToString() %>" />

这呈现在文本框内。简而言之,除了服务器控件属性中的静态字符串之外,您无法获得任何其他内容。


此问题有几种可能的解决方案:

  1. 在 Page_Load 方法中,按照您的描述设置 FieldRenderer 的 Item 字段。如果需要使用此逻辑的子布局数量有限,这是最好的方法。

  2. 您可以创建一个 Item XFieldRenderer 子类,将 Item 绑定到 ItemS:

     class ItemXFieldRenderer: FieldRenderer {
       public ItemXFieldRenderer() {
           Item = [code to retrieve ItemX];
       }
     }
    

    然后,您可以在解决方案中任何想要从 ItemX 呈现字段的位置使用此控件。如果大量子布局需要使用此逻辑并且您可能需要绑定的项目数量非常有限,那么这是最好的方法。

  3. 您可以创建 FieldRenderer 的子类来解析字符串属性并使用逻辑将字符串值映射到正确的项目。

  4. 如果 ItemX 的路径是不变的,您可以在 Datasource 属性中设置完整路径,如下所示:

    <sc:FieldRenderer runat="server" FieldName="Logo"
    DataSource="/sitecore/context/home/some/item" />
    

    您还可以使用相对路径。例如,如果上下文项有一个名为“Sources”的子文件夹,而该子文件夹又具有一个子项“Default”,则您可以使用以下语法在 FieldRenderer 中引用:

    <sc:FieldRenderer runat="server" FieldName="Logo"
    DataSource="sources/default" />
    

    根据我的测试,数据源的评估不区分大小写,并且像“../..”和“//*[@@name='value']”这样的 Sitecore 查询表达式不起作用。

  5. 您可以使用数据绑定来强制 ASCX 读取属性,如本文中所建议的论坛主题 http://sdn.sitecore.net/Forum/ShowPost.aspx?postid=29371:

    <sc:FieldRenderer id="myRenderer" FieldName="Logo" 
    DataSource=<%# ItemX.Paths.FullPath %> />
    

    并在代码隐藏中添加

    myRenderer.DataBind(); 
    

    使用最后一种方法,您仍然使用代码隐藏,但哪个 FieldRenderer 使用哪个项目的决定现在包含在标记中。克里斯蒂安·哈格里德指出 https://stackoverflow.com/a/13427050/402949,您可以在子布局上调用 this.DataBind() 来强制 DataBind 在页面上的所有控件上递归执行。

  6. 您可以使用 ASP.NET 的 ExpressionBuilder 语法来集中数据源路径的位置。有三种方法可以做到这一点:

    • 将您的路径放入 Web.config 中。将其添加到 Web.config 的 部分:

      <add key="ItemX" value="/sitecore/content/path/to/itemx" />
      然后将 DataSource 属性设置为:

      DataSource=<%$ AppConfig: ItemX %>

    • 将路径放置在 App_GlobalSettings 的 .resx 资源文件中。如果文件名为 Paths.resx,您可以使用以下语法访问其设置:

      DataSource=<%$ Resources: Paths,ItemX %>

    • 你可以建立一个表达式生成器 http://msdn.microsoft.com/en-us/library/system.web.compilation.expressionbuilder.aspx类来构建将字符串值转换为路径的逻辑。请注意,ExpressionBuilder 是在解析时评估的,因此您将无法访问 Sitecore 上下文。这看起来并不简单:表达式生成器需要在 Web.config 中引用,并且代码需要驻留在 App_Code 中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置 FieldRenderer 的 Item 或 DataSource 属性的好方法是什么? 的相关文章

  • Response.Redirect() 将绝对 URL 作为相对 URL 处理

    我有一个 net C 页面 它重定向到绝对 url 例如 Response Redirect rtsp myvideoServer com myVideoAddress mp4 ticket 1234 dt 1234 但重定向后会导致 ht
  • ASP.net C#.如何解析博客中的原子提要

    饲料位于 http latestpackagingnews blogspot com feeds posts default http latestpackagingnews blogspot com feeds posts default
  • ASP.NET MVC 3,如何正确制作主题

    我正在寻找有关如何以最佳方式在 MVC 3 中实现 主题 的输入 我想需要一个自定义视图引擎来负责定位视图文件等 我还希望主题系统是可扩展的 这样 如果它只是其中一个视图 我想更改其他视图 但仍使用默认值 有点像 Orchard 项目吗 想
  • 在 C# ASP.NET 中添加自定义 hashAlgorithmType

    我有一个页面需要加强安全性 我正在使用内置的 MembershipProvider 功能 目前有hashAlgorithmType设置为 SHA512 我有 BCrypt NET 库 http bcrypt codeplex com 当我从
  • 如何配置 IIS 以接受 POST 请求?

    我知道默认情况下 IIS 不接受发布请求 如何更改此设置 有人可以引导我改变这个 一步一步 吗 如果您使用的是 IIS 6 及更低版本 在 IIS 管理屏幕中右键单击您的网站或虚拟目录 去Properties然后去Home Director
  • ASP.NET 中获取当前域的最佳方法是什么?

    我想知道在 ASP NET 中获取当前域的最佳方法是什么 例如 http www domainname com subdir http www domainname com subdir 应该产生http www domainname co
  • Global.asax PostAuthenticateRequest 事件绑定是如何发生的?

    我怎样才能使用发布验证请求Global asax 事件 我正在跟进本教程 http www asp net security tutorials forms authentication configuration and advanced
  • 跨多个域的 ASP.NET 会话

    是否有合适的 NET 解决方案来在多个域上提供持久服务器会话 即 如果该网站的用户在 www site1 com 下登录 他们也将在 www site2 com 下登录 安全是我们正在开发的程序的一个问题 Thanks 它是否需要在会话中
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用
  • 如何完全禁用签名程序集?

    我有一个包含多个项目的 VS NET 2010 解决方案 我刚刚添加了一个新的库项目 the library assembly 启动项目是一个网站 当我运行该网站时 出现以下错误 无法加载文件或程序集 the library assembl
  • Entity Framework Core 中的两个外键

    我在使用 Entity Framework Core 创建数据库时使用代码优先方法 我想创建两个指向同一个表的外键 我的示例显示用户表将保存用户 ID 消息表将保存接收者 ID 和发送者 ID 这意味着两个值必须指向同一个表 用户代码 pu
  • OWIN 可以替代 ASP.NET MVC 应用程序中的 DI 吗?

    大约一年前 在 Visual Studio 中创建时自动生成的 MVC 项目不包含任何有关 OWIN 的内容 作为再次申请并试图了解这些变化的人 我想知道 OWIN 是否可以替代我的 DI 据我了解 Startup Auth cs 中的以下
  • 使用 PHP 对 ASP.NET 成员身份中的用户进行身份验证

    我在尝试使用 PHP 针对现有 ASP NET 成员资格数据库对用户进行身份验证时遇到一些问题 我在网上搜索过 发现现有的答案似乎对我不起作用 即 public static function Hash password salt deco
  • 当checked属性为false时,单选按钮默认被选中?

    我正在尝试生成单选按钮 有条件地检查检查的属性 如果该值存在于数据库中 则应选择它 否则检查的属性为 false 所以最初数据库中没有行 所有单选按钮的检查属性也为 false 但仍然在 UI 上选择 请参见下图 所以不知道这是默认行为还是
  • CSS、Javascript 和图像的长度为零

    我正在尝试将 ASP NET MVC 1 0 Visual Studio 2008 项目移植到 ASP NET MVC RC 2 Visual Studio 2010 该项目 并且一直 在 IIS 7 上运行 动态内容 由控制器提供的所有内
  • ASP.Net 应用程序中的音频/视频/文本聊天

    我需要在 ASP Net 中开发一个聊天系统 我已经浏览了很多关于类似主题的问题 但没有找到任何一个令人满意的 是否可以从头开始创建它 或者我是否需要使用一些 API 我的要求仅限于我的网站用户 可以说基于内联网 请帮我 要进行文字聊天 人
  • Web 表单中的 IRouteHandler:路由需要 HttpContext.User 的请求

    我正在尝试向 Asp Net Web Forms 应用程序添加一个非常基本的路由 在 IIS 7 下运行 集成模式 http mydomain com foo http mydomain com foo 我想显示动态页面的结果 http m
  • 如何排列表格中的项目 - MVC3 视图 (Index.cshtml)

    我想使用 ASP NET MVC3 显示特定类型食品样本中存在的不同类型维生素的含量 如何在我的视图 Index cshtml 中显示它 an example 这些是我的代码 table tr th th foreach var m in
  • 将 HTML 表格导出到 Excel

    我在 ASP NET MVC 视图页面上有 HTML 表 现在我必须将该表导出到 Excel 1 我使用部分视图 Inquiries ascx 来显示数据库中的表数据 使用LINQ to Entity 2 我还使用了 UITableFilt
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • 在unity 3d上绘制3D多边形

    我正在为我正在进行的一个项目尝试统一 我正在尝试从我拥有的一组坐标中绘制 3D 多边形 所以我现在要做的是在两点之间构建一排立方体 我计划将这些点构建成实体形状或只是 墙壁 以形成一个房间 然而 它似乎没有按预期工作 请指教 drawCub
  • 如何让用户选择适用于 Safari 浏览器

    我有这个 html 结构 ol class linenums li class L0 code span span code li ol 代码之前有行号 通过选择代码 我使用此 css 以便仅选择代码而不选择行号 ol linenums l
  • git服务器复制

    我们正在使用 git 进行多站点项目 并且仓库和团队都大幅增长 因此 远程站点正在遭受痛苦 我想向远程站点添加新的 git 服务器 以减少 git 服务器上的负载并使下载速度更快 但是我不确定如何保持这些同步 有什么办法可以原子地复制 gi
  • 键盘位置遮挡了 EditText 下方的视图,希望保持可见

    我的活动基本上是一个长形式的输入字段 在每一行上 我想在每个 EditText 下方显示一个 TextView 作为提示文本 并且我希望 TextView 在用户输入数据时始终保持可见 不幸的是 软键盘掩盖了提示文本 并且总是将其自身定位在
  • 从富文本框控件获取当前滚动位置?

    我在互联网上进行了广泛的搜索 看到了很多这样的问题 但我还没有看到真正的答案 我有一个富文本框控件 其中有很多文本 该控件中有一些法律信息 默认情况下 接受 按钮被禁用 我想检测滚动事件是否垂直滚动条的位置位于底部 如果它位于底部 请启用该
  • strtotime() 的结果是否会根据时区而改变?

    I used strtotime datetime 在 PHP 中将文本日期时间描述转换为 Unix 时间戳 参见下面的代码 datetime 2012 04 17 00 00 00 timestamp strtotime datetime
  • 使用 Enter 按键事件和鼠标单击触发提交按钮

    我是一个完全的初学者 正在使用 Just do it 和以项目为中心的路线学习前端 我的网络应用程序的工作原理基本上与待办事项列表类似 我认为这是因为我对同一个元素有两次 getElementById 这最初有效 add idea to l
  • Kendo Grid - 它自己的加载指示器

    Kendo grid在网格加载 分页 排序时自动提供自己的Loading指示器 它运行良好 但我不希望显示 隐藏这个内置加载指示器 如何禁用此功能 请建议我 谢谢 维诺斯 很简单 用CSS隐藏就可以了 您的选择器需要比内置 Kendo 类更
  • 如何在 C# 中使 winforms 进度条垂直移动?

    我正在开发 WinForms Jukebox 我想要一个垂直的进度条来控制音量 有谁知道这是怎么做到的吗 我不知道我会使用进度条control音量 但要display您可以使用用户绘制的控件来调整音量级别 或者您可以仅使用背景颜色调整标签的
  • 如何在 angular2 中访问父组件中的子组件 HTML 元素值?

    我使用下面的代码在父组件的按钮单击期间访问父组件中的子组件 HTML 元素值 子组件 ts Component selector child component template
  • 关于转向多层 Delphi 架构的建议

    我们有一个与 Firebird 紧密相关的相对较大的应用程序 存储过程 视图等 我们现在收到很多支持其他数据库的请求 我们还希望将很多功能从客户端转移到服务器 现在似乎是迁移到 3 4 层架构的好时机 我们已经了解了 DataSnap 20
  • 如何将变量从 Express.js 传递到 Angular11 通用 SSR

    简单的问题 我们如何从expressjs传递到角度通用HTML组件或主应用程序index html变量 比如从expressjs到ejs或pug app get req res gt res render index req messsag
  • Sublime Text 2 突出显示装订线

    默认情况下 当插入符号位于 Sublime Text 2 中的行号 装订线区域时 该行会突出显示 我怎样才能将其关闭 我看到隐藏装订线的选项 但我希望行号可见 谢谢 要关闭行突出显示 请转到preferences gt settings U
  • Phonegap 页面旋转错误,在横向模式下显示为纵向

    我有一个 简单的 网页打包在phonegap 应用程序中 如果我启动应用程序 它会以纵向显示页面 横向页面宽度 所以文本从左下到左上开始 右侧有一个空白 页面应该在此处结束 这是我所看到的 在我的中支持的方向是横向左和右 Info plis
  • 是否可以使用 XSLT 跳过层次结构中的级别?

    层次结构采用 XML 格式 我使用 XSLT 来转换数据 例如 如果层次结构有 4 个级别 并且我想跳过中间的一个级别 例如第 3 级 Level 1 Level 2 Level 3 Skip this level Level 4 Leve
  • 仅使用 CSS 的最大高度和最大宽度

    我的第一篇文章在这里 我使用 div 以相同的比例 180wx170h 裁剪缩略图 在处理肖像和风景图像时 我陷入了困境 如果我使用它 这对于肖像风格的图像来说很好 crop img max height 170px width auto
  • 为 C# 应用程序制作安装程序并将 .NET Framework 安装程序包含到安装程序中

    我已经完成了 C 应用程序 但有一个小问题 当我尝试在另一台 PC 上运行应用程序时 我始终需要安装 NET Framework 4 0 有什么办法可以使其工作而无需从互联网安装框架吗 我之前尝试过创新设置 http www jrsoftw
  • JVM跳转指令的偏移量怎么会是32768呢?

    在写一个回答有关 JVM 字节码偏移量的问题 https stackoverflow com a 30240357 3182664 我注意到 javac 的行为和生成的类文件中有一些我无法解释的内容 当编译这样的类时 class FarJu
  • C++/Fortran 中贝塞尔函数的集成 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在 Fortran 或 和 C 中对包含贝塞尔函数的方程进行从 0 到 无穷大 的数值积分 我在matlab中做了 但对于较大的输入和特
  • 设置 FieldRenderer 的 Item 或 DataSource 属性的好方法是什么?

    场景是我有很多 FieldRenderer 这些应该从不同的地方输出数据 一些来自项目 X 另一些来自项目 Y 并且应该输出项目 Z 的属性 假设我有公共财产ItemX我想从中输出一个属性 以下任何一个都可以 但我没有得到他们中任何一个的输