【问题标题】:In Razor Pages view, why won't href and onclick attributes render?在 Razor 页面视图中,为什么不会呈现 href 和 onclick 属性?
【发布时间】:2021-05-16 08:17:37
【问题描述】:

在 Razor Pages 视图(没有“@page”属性;只是一个 cshtml 文件)中,我试图呈现一个锚标记。我不想使用标签助手,我只是希望它像这样呈现:

<a href="javascript:void(0)" onclick="javascriptFunctionCall(1)" class="page-link"><i class="fas fa-fast-backward"></i></a>

视图呈现时没有错误消息,但锚标记内的“href”和“onclick”属性根本不呈现。 “类”属性确实呈现。如果我向标签添加其他属性,它们也会呈现。我正在使用 fontawesome 图标,它们可以正确渲染。但是“href”和“onclick”属性不渲染。

对于“href”属性,如果我将值更改为“#”,它会呈现。显然,如果属性包含 javascript,RazorPages 渲染引擎中的某些内容会说“我不会渲染这个”。

这显然只发生在视图中。我注意到我尝试在页面上呈现相同的元素(具有 @page 属性)它呈现得很好。

当用户点击一个按钮时,视图本身会被渲染,该按钮会调用一个 fetch 调用,该调用会点击一个呈现视图的服务器端方法,如下所示:

return Partial("_MyViewName", myModel);

有没有办法在 Razor 视图的锚标记中呈现 href 和 onclick 属性中的静态值?

【问题讨论】:

  • 剃须刀引擎不应触及普通标签除非您有一些TagHelperComponenta 标签为目标。请注意,必须明确使用的不是TagHelperasp.net core 有 2 个内置 TagHelperComponents 以 headbody 为目标。对于其他标签(例如a),必须在您的项目或某个引用库中声明一个自定义标签。所以很难说。 TagHelperComponent 可以修改目标标签的渲染输出。在您的情况下,onclickhref 可能会以某种方式被删除。
  • 这太奇怪了,就像我说的那样,如果它被删除,则必须有一些代码将其删除。而TagHelperComponent 是一个罕见的能够做到这一点的人。 PartialView 在这种情况下应该无关紧要。此外,可能有一些javascript 代码也可以在加载后修改元素。因此,如果可能,您可以尝试通过禁用 javascript 的浏览器或工具加载您的视图。
  • 顺便说一句,浏览器本身也可以按自己的方式修改元素,所以在不同的浏览器上试试吧。
  • 我刚刚测试了一个简单的演示,其中一个 ajax 调用加载了一个局部视图(与您的示例一样,它具有精确的 a 元素),它只输出精确的 html,没有任何内容被删除。换句话说,我无法重现该问题。
  • 这只是基本的,没什么特别的。部分视图仅包含一行(在您的示例中)。返回Partial("_Test"); 的页面处理程序(部分视图名为_Test.cshtml)。就这样。页面上的按钮,单击该按钮使用 jQuery $.ajax 向部分处理程序发送请求。

标签: asp.net-core razor-pages


【解决方案1】:

我自己无意中删除了 javascript,因为在 javascript 中,我正在通过 DOMPurify 库传递从服务器返回的值(以防止 javascript 注入攻击)。这对我来说非常愚蠢,但特别感谢@KingKing 强迫我解决这个问题。

【讨论】:

    猜你喜欢
    • 2020-12-30
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2019-05-02
    • 2018-01-26
    • 2023-01-25
    • 1970-01-01
    • 2023-02-20
    相关资源
    最近更新 更多