ASP.NET: код позади или без кода?

Почему кто-то может захотеть не использовать код за файлом, чтобы серверный код был отделен от разметки? Разве это не должно было быть одним из преимуществ .NET перед классическим ASP?

Лично я считаю, что смешивание кода с разметкой значительно затрудняет понимание кода.

Ненавижу видеть эти чертовы ‹%%> (серверные блоки), смешанные с разметкой, уф. Я ожидал, что это в ASP.NET исключительно для обратной совместимости с классическим ASP, но я все время вижу примеры от MS, которые включают эти желтые скобки.

Я пытаюсь понять пример кода, который доступен для загрузки здесь, и озадачен почему все мои серверные перерывы, показанные здесь, не прерываются при выполнении кода, даже если я посмотрите, что было установлено в web.config. Поскольку я обычно работаю с выделенным кодом, мне интересно, есть ли что-то в коде на стороне сервера в aspx, который обрабатывается по-другому, что мешает мне отлаживать код runat = server.

Так. Мои вопросы:

1) Почему кто-то не хочет использовать код за файлом, чтобы серверный код был отделен от разметки?

2) Почему я не могу сломать логику на стороне сервера?

Мы также приветствуем ваше понимание и мнение по поводу любых моих комментариев.


person Chad    schedule 20.01.2010    source источник
comment
а ваш вопрос ...?   -  person Rubens Farias    schedule 20.01.2010
comment
@Rubens, я полагаю, его вопрос был таков: почему кто-то может захотеть не использовать код за файлом, чтобы код на стороне сервера был отделен от разметки?   -  person Russ Bradberry    schedule 20.01.2010
comment
Зачем кому-то нужно делать X вместо Y?   -  person jball    schedule 20.01.2010
comment
Рубенс, ищи знаки вопроса. jball, я хотел бы проголосовать за комментарий.   -  person Chad    schedule 20.01.2010
comment
@Velika - все мы знаем, что вопросительные знаки были вставлены после комментария Рубенса.   -  person jball    schedule 20.01.2010
comment
@jball: судя по истории редактирования, они не были. Внизу сообщения было добавлено разъяснение, но исходные вопросы все еще там.   -  person Russ Bradberry    schedule 20.01.2010
comment
@Russ - Вы правы, вопросы вверху были с самого начала. Однако их полезность в качестве вопросов кажется довольно близкой к нулю.   -  person jball    schedule 20.01.2010
comment
jball, я просто дергаю твою цепочку для своего удовольствия. Я понимаю, что мои вопросы были скрыты моими косвенными комментариями.   -  person Chad    schedule 20.01.2010
comment
Похоже, вы разрабатывали веб-приложения только с помощью asp и asp.net. Попробуйте Java, php и т. Д., Это будет иметь больше смысла.   -  person Yuri Ghensev    schedule 10.11.2011


Ответы (6)


Возможность встроенного кода с использованием <% %> предназначена не только для обратной совместимости, но и для функции .NET, которая может обеспечить некоторые (относительно!) Ясные и простые решения. Однако его часто используют не лучшим образом. Точно так же код в коде программной части, если он часто (обычно на самом деле) используется не идеально, как и веб-элементы управления.

Наличие кода в коде программной части обычно помогает не отдельных проблемах, а помогает получить беспорядочный спагетти-код. в другом месте, чем в классическом asp. .NET позволяет иметь очень хорошо организованные решения, но сделать это зависит от вас. Размещение кода в коде за страницами - это не первый шаг на этом пути, это именно то, с чего оно может начаться.

Что касается того, почему ваши события не запускаются, скорее всего:

  • Событие фактически не запускается. (Вы изменяете выбранный элемент в раскрывающемся списке, чтобы действительно вызвать это событие?)
  • На самом деле у вас нет привязки к событию. В окне свойств для этого элемента управления указано ли имя функции события, соответствующее рассматриваемому событию? (это наиболее простой способ; например, вы также можете использовать клавиши дескрипторы в vb)
  • Часто, когда мои события не запускаются, это потому, что я делаю что-то глупое, например, не запустил свой код, или мой URL-адрес указывает не на то место.
person Patrick Karcher    schedule 20.01.2010

1) Думаю, если вы привыкли разрабатывать классический ASP, переход будет несложным.

2) Не видя вашей разметки, я не смог бы сказать вам, в чем ваша проблема. Если вы не достигли этой точки останова, это могло быть по одной из нескольких причин:

  1. Отладка может быть отключена
  2. Мероприятие не состоится
  3. В вашей разметке нет ничего, что сообщало бы элементу управления, что ваш метод используется в качестве обработчика события.
person Gabriel McAdams    schedule 20.01.2010

Скобки, используемые в большинстве примеров MS, обычно используются для вызова функций или ссылки на базу данных.

Например, <%# Databinder.Eval("MyColumn") %> будет использоваться в ретрансляторе.

Есть также теги, которые используются для ссылки на атрибуты web.config, такие как строка подключения <%$ConnectionStrings:NorthwindConnection %>

person Russ Bradberry    schedule 20.01.2010

Очень часто «образец» кода ASP.NET распространяется вместе со встроенным кодом просто потому, что так легче распространять. Он самодостаточен, вы можете просто скопировать и вставить его в блокнот, сохранить как .aspx в папке для тестового сайта и посмотреть, как он работает. Вероятно, это не то, чем вы хотите заниматься в продакшене.

Что касается более общего вопроса ... ASP.NET MVC технически все еще является ASP.NET и не использует файлы кода программной части. Многие разработчики считают, что файлы кода программной части просто обменяли один тип уродства на другой; лично я могу видеть это с обеих сторон, но я думаю, что настоящая причина такого количества паршивого кода в классическом ASP была не в супе с тегами, а в том, что люди совершали безумные вещи в коде "просмотра", например, открывали соединения с базой данных. . Пока вы этого не делаете, несколько тегов сервера не имеют большого значения.

Фактически, если вы выполните какую-либо привязку данных, вы получите кучу тегов Eval и Bind, смешанных с разметкой. Так что даже чистые веб-формы с программным кодом не всегда безупречно чисты.

person Aaronaught    schedule 20.01.2010

2) Почему я не могу сломать логику на стороне сервера?

Возможно, что сборка завершилась неудачно, когда вы начали отладку, и вы не заметили, что выбрали запуск предыдущей сборки. Ваши точки останова могли не существовать в этой сборке.

person Michael Paulukonis    schedule 14.10.2011

<%# DataBinder.Eval("Column") %> может сэкономить вам много лишнего кода из кода, лежащего в основе кода, и, на мой взгляд, это не так уж и плохо.

person SiN    schedule 14.10.2011