根据razor C#列表计数在jQuery中分配css类
我有一个css通知菜单。这一切都在一个分区中。在这个分区中,我有一个链接,当鼠标悬停时,它会以菜单式的方式显示通知 如果有通知,我想更改div的背景色,如果链接被悬停,我想删除背景色。我想使用名为“templates”的C#razor变量的count属性,该变量存储要在菜单中显示的通知的模板 我想在javascript/jquery中执行类似的操作根据razor C#列表计数在jQuery中分配css类,jquery,css,asp.net-mvc,razor,Jquery,Css,Asp.net Mvc,Razor,我有一个css通知菜单。这一切都在一个分区中。在这个分区中,我有一个链接,当鼠标悬停时,它会以菜单式的方式显示通知 如果有通知,我想更改div的背景色,如果链接被悬停,我想删除背景色。我想使用名为“templates”的C#razor变量的count属性,该变量存储要在菜单中显示的通知的模板 我想在javascript/jquery中执行类似的操作 $(document).ready(function()) { if(@templates.Count > 0) { $('#
$(document).ready(function())
{
if(@templates.Count > 0)
{
$('#notificationsMenuItem').addClass('notifNotSeen');
}
}
function changeBackground() {
var menu = $('#notificationsMenuItem');
if(menu.hasClass('notifNotSeen'))
menu.removeClass('notifNotSeen');
}
以下是包含菜单结构的div:
<div id="notificationsMenuItem" class="divList">
<a href="#" style="font-weight: normal; padding: 0;" onmousedown="changeBackground()">Notifications</a>
........
</div>
........
这可能吗?还有什么其他方法可以做到这一点 您可以添加带有计数的隐藏输入字段:
@Html.Hidden("templatesCount", @templates.Count, new {@id="templatesCount"})
并读取jQuery中的值:
$('#templatesCount').val();
通过这种方式,您可以将js作为一个单独的文件使用。应该与您在那里编写它的方式差不多。它将输出“动态”javascript,如果在文件中查看,当然会显得有点愚蠢,因为在那里它显示为硬编码的值,例如,
if(5>0){…}
-但它仍然可以工作。@UweB,我的问题是它不能正常工作,我不能将C#服务器端变量的值赋给jQuery javascript函数。好吧,@templates到底是什么?因为如果这是cshtml页面中的一个C#变量,那应该没问题,因为@templates.Count将由服务器计算并简单地写入结果HTML页面/JavaScript函数,而不是将其传递给函数,或者用不同的措辞:服务器的输出将改变JavaScript函数的主体,而不是将值传递给静态函数。它是一个C#变量(字符串列表),但在javascript中尝试执行此操作时,我遇到了一个“语法错误”:if(@templates.Count>0),但现在它工作了。这是客户端的语法错误,还是razor视图崩溃了?只有在cshtml中实际声明并分配了@template时,才可以使用@template.Count。如果视图执行正常,但出现JavaScript错误,请检查页面上的JavaScript。如果您在HTML页面中实际看到@template.Count
,则在服务器端它不会被识别为变量。应该在那里对其进行求值,并用实际值替换,以便在完全呈现的页面中看到类似于if(5>0)
的内容。不幸的是,这不起作用。我想这是因为我没有发表文章,所以隐藏字段的值似乎没有设置。我也不能使用ChromeDevTools来调试javascript,因为我使用的是这个菜单的部分视图。