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