4

在 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 帮助程序生成的数据属性发生变化,我的客户端代码将不再为元素设置样式。

4

2 回答 2

4

你能把脚本指向一个 .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');
于 2013-01-22T08:06:23.913 回答
1

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

于 2013-01-22T07:44:39.873 回答