Как я могу отлаживать свой сайт MVC3 с помощью Chrome?

Я создаю веб-сайт ASP.NET MVC3. У меня есть javascript в моем файле .cshtml:

<div>hello!</div>

<script type="text/javascript">
   $(document).ready(function () { alert("ready!"); })
</script>

Встроенный отладчик Google Chrome не видит этот фрагмент javascript, поэтому я не могу его отладить.

Как установить точку останова в этом фрагменте javascript во встроенном отладчике Google Chrome?


person Judah Gabriel Himango    schedule 07.07.2011    source источник
comment
разбить функцию на несколько строк. Затем вы можете установить точку останова на строке alert.   -  person Jim Schubert    schedule 08.07.2011
comment
Кроме того, в качестве примечания, если это находится в блоке кода @Html.BeginForm в механизме представления Razor, вам, возможно, придется изменить способ создания этого блока (фигурные скобки могут нарушить компиляцию вашего представления).   -  person Jim Schubert    schedule 08.07.2011
comment
@ Джим: Нет, не будешь. Razor ищет закрывающий } только вне любых тегов HTML (в контексте кода).   -  person SLaks    schedule 08.07.2011
comment
@SLaks: это неправда. Я специально столкнулся с этой проблемой из-за невозможности Razor проанализировать несколько вложенных блоков внутри блока @using(Html.BeginForm()). Это было сразу после официального выпуска MVC3, возможно, что-то изменилось.   -  person Jim Schubert    schedule 08.07.2011
comment
@ Джим: я почти уверен, что ты ошибаешься. Можете ли вы показать мне пример проблемной разметки?   -  person SLaks    schedule 08.07.2011
comment
@Slaks: Извини, чувак. Это код одной из крупнейших компаний в мире. Я не собираюсь возиться с этим. Но я могу вас заверить, изменив его с одноразового на два отдельных вызова, как в ответе, который я опубликовал, устранена проблема в нескольких представлениях. Кто-то из моей команды отправил вопрос в Microsoft и так и не получил ответа.   -  person Jim Schubert    schedule 08.07.2011
comment
Нет, не имеет ничего общего с несколькими строками. (Это был всего лишь пример. Мой реальный код с несколькими строками не может быть отлажен в Chrome, потому что это фрагмент кода javascript, часть моего .cshtml.   -  person Judah Gabriel Himango    schedule 08.07.2011


Ответы (2)


Странно, у меня отлично работает:

  1. Перейдите на вкладку Scripts
  2. Вы увидите раскрывающийся список всех упомянутых файлов javascript, выберите тот, который соответствует встроенным сценариям (:9038 на моем снимке экрана ниже)
  3. Установите точку останова

введите здесь описание изображения

В качестве альтернативы вы также можете рассмотреть FireBug.

person Darin Dimitrov    schedule 07.07.2011
comment
Мой скрипт там не отображается. Или, по крайней мере, не последовательно. Он также не отображается в расширении Chrome FireBug Lite. - person Judah Gabriel Himango; 08.07.2011
comment
Отметив это как ответ; иногда это работает: иногда мой сценарий отображается в раскрывающемся списке. В другой раз его нет. - person Judah Gabriel Himango; 09.07.2011

В MVC3, работающем с механизмом просмотра бритвы, у меня были фигурные скобки, которые действительно испортили синтаксический анализ представления.

Например, если у вас есть:

@using(Html.BeginForm()){
<div>hello!</div>

<script type="text/javascript">
   $(document).ready(function () { alert("ready!"); });
</script>
}

У вас могут возникнуть проблемы с фигурными скобками скрипта. Попробуйте изменить его на:

  @{ Html.BeginForm(); }
    <div>hello!</div>

    <script type="text/javascript">
       $(document).ready(function () { 
            alert("ready!"); 
       });
    </script>
   @{ Html.EndForm(); }

Это может быть или не быть ответом на ваш вопрос, но мне потребовалась целая вечность, чтобы понять, что не так с некоторыми из моих форм. Однако я не встраивал в них скрипты... это были блоки для условной логики, которые сломали бы мне все.

РЕДАКТИРОВАТЬ Проведя небольшое исследование, я обнаружил у кого-то проблему, которая привела меня к решению: aspnet.codeplex.com/workitem/7551.

Мое сообщение фиксации (из кодовой базы, к которой у меня больше нет физического доступа) предполагает, что это могла быть плохая разметка. Разработчик, написавший оскорбительные страницы, любил использовать теги с заглавной буквы, хотя мы использовали тип документа XHTML 1.1. У него также было много условно компилируемых и/или заполняемых атрибутов. Например:

<div class="something @myHelper(someFlag)"></div>
<div @{ isSomeFlag ? <text>class="asdf"</text> : "" }></div>

Мое решение следует рассматривать как временное решение.

person Jim Schubert    schedule 07.07.2011
comment
Ваш первый пример не вызывает у меня проблем с Razor, и лично я никогда не сталкивался с какими-либо проблемами с парсером Razor в отношении фигурных скобок JS и C#. - person Kirk Woll; 08.07.2011
comment
@Kirk: я сам несколько раз использовал первый пример. Это может быть предельным случаем, но я сталкивался с этим раза три или около того. Разумеется, все это был чужой код. :П - person Jim Schubert; 08.07.2011
comment
@Kirk: Кроме того, вы, вероятно, похожи на меня и не используете слишком много логики в представлении. Это было очень часто на этих страницах, ~75-100 строк управляющих структур. - person Jim Schubert; 08.07.2011
comment
Код и разметка исключают друг друга; нет ситуации, в которой Razor может ожидать и разметку, и }. - person SLaks; 08.07.2011
comment
@SLaks: я бы подправил код и опубликовал пример, если бы у меня все еще был доступ к кодовой базе, но недавно я переехал и покинул эту должность. Я свяжусь с кем-то, кто все еще в команде, и посмотрю, смогу ли я получить реальный пример. - person Jim Schubert; 08.07.2011
comment
Нет, извините, проблема не в фигурных скобках. Этот скрипт внутри .cshtml даже не отображается в отладчике Chrome. - person Judah Gabriel Himango; 08.07.2011
comment
@Judah: Вы пытались обернуть теги script в теги <text></text>? - person Jim Schubert; 08.07.2011
comment
@SLaks: я не смог получить код от своего старого коллеги. Я обнаружил у кого-то проблему, которая привела меня к решению: aspnet.codeplex.com/workitem/7551, и мое сообщение о коммите предполагает, что это могла быть плохая разметка. Разработчик, написавший оскорбительные страницы, любил использовать теги с заглавной буквы, хотя мы использовали тип документа XHTML 1.1. Это было бы объяснением, я думаю. - person Jim Schubert; 08.07.2011
comment
@SLaks: У вас есть идеи, почему использование одноразовой формы Html.BeginForm будет менее щадящим для плохо написанной HTML-разметки? - person Jim Schubert; 08.07.2011
comment
@SLaks: я также обновил свой ответ некоторыми примерами дурачества, с которыми я регулярно сталкивался (и на оскорбительных страницах). - person Jim Schubert; 08.07.2011
comment
@Jim: Теги, включая <text>, являются утверждениями, а не выражениями. Вы не можете поставить их в условном выражении. - person SLaks; 08.07.2011
comment
@Slaks: теги <text> могли быть, а могли и не быть. Прошло пару месяцев с тех пор, как я в последний раз видел этот код. Но таких странностей было много, и каждый раз, когда я это видел, мне хотелось биться головой о стол. Спасибо, что спросили больше, извините, я не могу предоставить фактический код. - person Jim Schubert; 08.07.2011