这是我的代码:
@{
ViewBag.Title = "My page";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<script type="text/javascript">
$(document).ready(function () {
$('#menucontainer').hide();
});
</script>
<h2>My page</h2>
@foreach (List<MyClass> item in (List<MyClass>[])ViewData["myList"])
{
foreach (MyClass item1 in item)
{
if (item1.name.Equals("something"))
{
<script type="text/javascript">
$(document).ready(function () {
$('#idSomething').show();
});
</script>
continue;
}
}
break;
}
我在{
中有一个断点。它被击中,然后进入continue;
。脚本中的代码:$('#idSomething').show();
永远不会被击中!这是为什么以及如何解决这个问题?
我也尝试过:
if (item1.name.Equals("something"))
{
@: ("#idSomething").show();
continue;
}
同样,show()
调用断点未被命中。
答案 0 :(得分:3)
我认为Razor不够聪明,不能单独处理这样的事情,尝试使用<text>
标签,因此它知道它应该转储输出而不触及它:
@foreach (List<MyClass> item in (List<MyClass>[])ViewData["myList"])
{
foreach (MyClass item1 in item)
{
if (item1.name.Equals("something"))
{
<text>
<script type="text/javascript">
$(document).ready(function () {
$('#idSomething').show();
});
</script>
</text>
continue;
}
}
break;
}
答案 1 :(得分:1)
Javascript是客户端,因此无法逐步完成,因为C#代码可以在VS调试器中。
要逐步执行您的javascript代码,有几种工具,最着名的是Firebug for Firefox。如果您在javascript选项卡中查看代码,则可以像设置Visual Studio一样设置断点并逐步执行/上/下。
答案 2 :(得分:1)
如果您在Internet Explorer中运行,则JavaScript调试内置于Visual Studio中,但您必须在Internet Explorer看到的文档中设置断点。当您以调试模式启动项目时,您将在解决方案资源管理器中看到“脚本文档”部分。如果您在该部分下找到JavaScript代码,则应该能够设置断点。
答案 3 :(得分:0)
您正在混淆服务器端调试和客户端调试。
当您在C#代码中的{
上设置断点时,您将在服务器端设置断点。解析页面时,将触发断点。
但此时,javascript未执行。它实际上甚至不是javascript,它只是被浏览器理解,并且将在浏览器中呈现页面时执行。要打破javascript代码,你必须在浏览器的javascript控制台中设置另一个断点。