JavaScript 中的 HTML 助手?

Posted

技术标签:

【中文标题】JavaScript 中的 HTML 助手?【英文标题】:HTML Helper in JavaScript? 【发布时间】:2013-01-05 09:31:38 【问题描述】:

在 Razor 中我可以这样做:

<p @html.MyCustomDataAttributeFor(person) >@person.Name</p>

渲染这样的东西:

<p data-custom-person-id="1234567890" >Fred</p>

我真的必须在(不显眼的)javascript 中执行此操作:

$('p[data-custom-person-id="1234567890"]').css('background-color','red');

当我更愿意这样做时:

$('p[@Html.MyCustomDataAttributeFor(person)]').css('background-color','red');

如果我可以的话,否则如果 HTML 助手生成的数据属性发生变化,我的客户端代码将不再为元素设置样式。

【问题讨论】:

这个 javascript 在视图文件中吗?您使用的是什么服务器端语言?如果 JS 在视图文件中(我假设你的 Razor 代码在其中),那么你应该能够做你想做的事。 它在一个单独的 .js 文件中 那我不相信你可以为所欲为。 【参考方案1】:

您能否将脚本指向一个 .cshtml 文件?

 <script type="text/javascript" src="/myscript.cshtml"></script>

我想我已经为 .php 和 .aspx 做了这个,所以我看不出它不应该工作的原因。 在这些情况下,它会让服务器首先处理文件。

否则,您可以使用客户HttpHandler 来解析服务器端所需的任何文本,然后再将其发送到客户端。

然而,最简单的方法是从 Razor 设置一些 Javascript 变量,即:

<script type="text/javascript">
    var customerId = '@Html.MyCustomDataAttributeFor(person)';
</script>

然后写:

$('p[' + customerId + ']').css('background-color','red');

【讨论】:

【参考方案2】:

data-custom-person-id="1234567890" 在服务器将@Html.MyCustomDataAttributeFor(person) 转换为该值后呈现给浏览器。在客户端,您根本不会收到这些文本。因此,您不能将这些语句用于客户端样式。

【讨论】:

你的意思是剃刀输出是每个请求一次,但 JavaScript 被缓存,所以硬编码是唯一的方法? @Grokodile 是的。 Razor 代码仅在服务器上转换为 Javascript 代码并发送到浏览器。所以,你只需要硬编码

以上是关于JavaScript 中的 HTML 助手?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ruby​​ on rails 中访问 rails 助手和嵌入资产 javascript 文件中的 ruby​​?

javascript介绍

JS简介和基本语法

asp.net核心中的部分标签助手和HTML助手有啥区别?

资产管道中的路由助手

gcloud函数:如何在部署期间包含本地javascript助手文件?