2013-01-22 44 views
4

在剃刀我可以这样做:JavaScript中的HTML助手?

<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帮助程序生成的数据属性更改,我的客户端代码将不再对该元素进行样式设置。

+1

这是在JavaScript的一个视图文件?你使用什么服务器端语言?如果JS在一个视图文件中(我假设你的Razor代码是),那么你应该可以做你想做的。 – matthewpavkov

+0

它在一个单独的.js文件中 – Grokodile

+0

然后我不相信你可以做你想做的事。 – matthewpavkov

回答

4

您可以将脚本指向.cshtml文件吗?

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

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

否则,您可以使用客户端HttpHandler来解析服务器端发送给客户端的任何文本。

最简单不过,是设置从剃须刀一些JavaScript变量,即:

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

然后写:

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

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

+0

你的意思是剃须刀的输出是每个请求一次,但JavaScript被缓存,所以硬编码是唯一的方法? – Grokodile

+0

@Grokodile是的。剃须刀代码仅在服务器上转换为Javascript代码并发送到浏览器。所以,你只需要硬编码 – gurvinder372