2010-01-20 4 views
5

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

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

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

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

So. Мои вопросы:

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

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

Ваше понимание и мнения также приветствуются по любому из моих соответствующих комментариев.

+4

и ваш вопрос ...? –

+0

@Rubens, я верю в его вопрос: «Почему кто-то хочет не использовать код за файлом, чтобы серверный код был отделен от разметки?» –

+0

Зачем кому-то делать X вместо Y? – jball

ответ

9

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

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

Относительно того, почему ваши события не стрельбы, скорее всего:

  • Событие фактически не срабатывает. (Вы изменяете выбранный элемент в раскрывающемся списке, чтобы фактически инициировать это событие?)
  • На самом деле вы не подключили это событие. В окне свойств этого элемента управления указано имя функции события, соответствующее соответствующему событию? (это самый простой способ: вы также можете использовать ручки keywork в vb, например)
  • Часто, когда мои события не срабатывают, это потому, что я делаю что-то глупое, не запустив свой код, или мой url указывает на неправильное место.
2

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

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

  1. Отладка может быть отключена
  2. событие не происходит
  3. Там нет ничего в разметке говорит контроль что ваш метод существует как обработчик события.
1

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

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

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

2

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

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

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

0

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

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

0

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

Смежные вопросы