【问题标题】:XML Variable as Razor MVC operator for OG Tags?XML 变量作为 OG 标签的 Razor MVC 运算符?
【发布时间】:2019-03-30 15:02:54
【问题描述】:

我对 Razor MVC 很陌生,并且正在使用一些不提供现代功能的软件。因此,我尝试在我的一些基于 HTML 的 C 锐利部分 (.cshtml) 中使用诸如“@Model.MetaTitle”之类的调用来动态构建 OG 标签。

这是一个电子商务网站。

到目前为止,我已经想出了很多方法来动态生成大多数 Open Graph 标签,这是我的代码:

<title>@Model.MetaTitle</title>
<meta name="description" content="@Model.MetaDescription" />
<link rel="canonical" href="https://example.com@(Request.RawUrl.Split(new[] {'?'})[0])" />
<meta property="fb:app_id" content="" />
<meta property="og:locale" content="en_US" />
<meta property="og:type" content="website" />
<meta property="og:title" content="@Model.MetaTitle" />
<meta property="og:description" content="@Model.MetaDescription" />
<meta property="og:url" content="https://example.com@(Request.RawUrl.Split(new[] {'?'})[0])" />
<meta property="og:site_name" content="My Website" />
<meta property="og:image" content="" />
<meta property="og:image:secure_url" content="" />
<meta property="og:image:alt" content="@Model.MetaTitle" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:image" content="" />
<meta name="twitter:description" content="@Model.MetaDescription" />
<meta name="twitter:title" content="My Website" />
<meta name="twitter:site" content="@("@my_twitter")" />
<meta name="twitter:creator" content="@("@my_twitter")" />

如您所见,这里唯一需要填写的数据是“og:image”属性。

页面视图是使用 XSLT/XML 生成的,在某些情况下,我可以使用 Razor 语法获取某些数据。即使在每个 XSLT/XML 文件上都调用了“ProductImage”,它也被声明为一个变量,如下所示:

<xsl:value-of select="$ProductImage" disable-output-escaping="yes"/>

那么如何将这个“$ProductImage”输出到商店产品的 url 到我的元“og:image”属性中,并限制对构建的访问?

我想出了一种使用 jQuery 的方法,但是 Facebook 对象调试器仍然抱怨缺少 og:image 标签。假设脚本标签没有及时传递。

示例(从页面上现有的 schema.org 数据中提取):

var ogUrl = $(".product-page meta[itemprop='image']").attr("content");

$('head').append("<meta property='og:image' content='" + ogUrl + "'/>");
$('head').append("<meta property='og:image:secure_url' content='" + ogUrl + "'/>");
$('head').append("<meta name='twitter:image' content='" + ogUrl + "' />");

这是我目前卡住的地方。需要将 url 传递给 og 标签中的产品图片... TIA。

更新这是形成变量的字符串:

 <xsl:variable name="ProductImage" select="aspdnsf:LookupProductImage(ProductID, ImageFilenameOverride, SKU, 'large', 1, $AltText)"/>

【问题讨论】:

  • 我不熟悉 Razor,但您的 $ProductImage 没有在您的示例代码中的任何地方声明。 &lt;xsl:value-of select="$ProductImage" disable-output-escaping="yes"/&gt; 行没有声明任何变量——它只是一个声明,无论此 xsl:value-of 声明位于何处,代码都会输出 $ProductImage 变量的值。要查找声明,请查找 &lt;xsl:variable name="ProductImage" ...&gt; 之类的内容。
  • 感谢 Eirikr,我找到了声明: 仍然不确定如何在元标记中填充它。

标签: xml xslt razor razor-pages facebook-opengraph


【解决方案1】:

如果您有 XSLT 视图引擎,那么您可以使用该变量通过使用 ProductImage 变量来创建所需的元标记。 我假设情况并非如此(或者您不允许这样做)。

如果您使用 xslt 生成剃刀视图,那么传递变量的答案将取决于引擎的实现。

我认为最简单的解决方案是直接使用

LookupProductImage(ProductID, ImageFilenameOverride, SKU, "large", 1, "")

在视图模型中(通过传递其他适当的变量),因为它绝对是您项目中的 C# 函数。然后,您可以像访问其他变量(即@Model.variable fashion)一样简单地使用产品图片网址。

【讨论】:

  • 感谢 RKalra,我仍然有点困惑,但会尝试一些事情。例如,“其他适当的变量”会有很大帮助。我将在哪里声明这个新变量?标头信息位于 .cshtml 文件中,而 XSLT 来自“.config”文件(我认为是 XML)。
  • 模型显然是你项目中的一个类。它的一个实例被传递给 razor 视图引擎,使其在您的视图中可用。 LookupProductImage 函数的适当变量是 ProductID、ImageFilenameOverride 和 SKU。如果在模型的类本身中找不到它们,您应该在 xslt 中检查它们的初始化,看看可以在 C# 代码中做什么。
  • 也许你错过了我的操作中我说我是新手并且访问权限有限的部分。一些代码示例会很好。也许其他人可以提供帮助,不幸的是,赏金已经过期,我无法根据这里的内容来奖励它。
猜你喜欢
  • 1970-01-01
  • 2017-11-24
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多