Если я использую следующий код, я теряю возможность щелкнуть правой кнопкой мыши по переменным в коде позади и выполнить рефакторинг (переименовать в этом случае) их
<a href='<%# "/Admin/Content/EditResource.aspx?ResourceId = " + Eval("Id").ToString() %>'>Edit</a>
Я вижу эту практику повсюду, но мне это кажется странным, поскольку я больше не могу получать ошибки времени компиляции, если я изменяю имя свойства. Я предпочитаю сделать что-то вроде этого
<a runat = "server" id = "MyLink">Edit</a>
а затем в коде позади
MyLink.Href= "/Admin/Content/EditResource.aspx?ResourceId = " + myObject.Id;
Мне действительно интересно услышать, думают ли люди, что вышеупомянутый подход лучше, поскольку это то, что я всегда вижу на популярных сайтах программирования и блогах (например, Скотт Гатри), и это меньший код, но я предпочитаю использовать ASP.NET, потому что он скомпилирован и предпочитают знать, если что-то сломано, во время компиляции, а не во время выполнения.





Я бы не назвал это плохой практикой (некоторые не согласятся, но почему они вообще предоставили нам эту возможность?), Но я бы сказал, что вы улучшите общую читаемость и ремонтопригодность, если не подчинитесь этой практике. Вы уже изложили хороший момент, и это ограничение функций IDE (например, проверка времени разработки, предупреждение времени компиляции и т. д.).
Я мог бы продолжать и говорить о том, сколько принципов он нарушает (повторное использование кода, разделение задач и т. д.), Но я могу вспомнить множество приложений, которые нарушают почти все принципы, но продолжают работать через несколько лет. Я, например, предпочитаю делать свой код как можно более модульным и поддерживаемым.
Он известен как спагетти-код, и многие программисты считают его нежелательным ... опять же, если вы и другие разработчики в вашей компании находите его читабельным и поддерживаемым, кто я такой, чтобы говорить вам, что делать.
Обязательно используйте include, чтобы уменьшить избыточность (СУХОЙ - не повторяйтесь)
Тебе решать. Иногда код "спагетти" легче поддерживать, чем создавать / использовать полную систему шаблонов для чего-то простого, но как только вы получите довольно сложные страницы или, более конкретно, как только вы начнете включать много логики в саму страницу, он может получить пачкается очень быстро.
Я думаю, что интересно, что больше asp.net требует кода на страницах aspx. Список в 3.5 и даже ASP.NET MVC. MVC в основном не имеет кода, но содержит код на страницах для отображения информации.
Я использую его только изредка и обычно по какой-то определенной причине. Я всегда буду более счастливым разработчиком, если мой код будет полностью отделен от разметки HTML. Это в некоторой степени личное предпочтение, но я бы сказал, что это лучшая практика.
Если вы думаете об этом с точки зрения разработки шаблонов, то разумно держать его в представлении, а не в коде. Что делать, если для обработки щелчка нужно перейти с привязки на элемент списка с ненавязчивым JS? Да, это не лучший пример, а просто такой пример.
Я всегда стараюсь думать о том, что если бы у меня был дизайнер (HTML, CSS, что-нибудь), что бы я делал с ним и что бы я делал в коде, и как мы не наступаем друг другу на пятки.
Это только плохая практика, если вы не можете хорошо ее инкапсулировать.
Как и все остальное, вы можете создавать неприятный, нечитаемый спагетти-код, за исключением того, что теперь у вас есть теги для контента, которые по замыслу не самые читаемые вещи в мире.
Я стараюсь сохранить тонны if вне шаблона hte, но чрезмерная инкапсуляция приводит к необходимости искать в 13 разных местах, чтобы понять, почему div x не запускается для клиента, так что это компромисс.
Это не так, но иногда это неизбежное зло.
Возьмем для примера ваш случай, хотя код позади, кажется, лучше разделяет проблемы, но проблема в том, что он может не разделять проблемы так четко, как вы хотите. Обычно, когда мы пишем код, мы не создаем приложения в среде MVC. Код, стоящий за кодом, в любом случае непросто поддерживать и тестировать, по крайней мере, по сравнению с MVC.
Если вы создаете приложения ASP.NET MVC, я думаю, вы наверняка застряли во встроенном коде. Но создание шаблона MVC - лучший способ сделать это с точки зрения ремонтопригодности и тестируемости.
Подводя итог: встроенный код - не лучшая практика, но неизбежное зло.
Мой 2цц.
Обычно я использую вот так.
<a href='<%# DataBinder.Eval(Container.DataItem,"Id",""/Admin/Content/EditResource.aspx?ResourceId = {0}") %'>
"но почему они вообще дали нам такую возможность?" Потому что именно так это сделал ASP 3.0? Есть причина, по которой у нас есть оболочка VB.NET вместо C#; Microsoft [часто] особенно серьезно относится к обратной совместимости и поддержанию прежних ментальных моделей. Как вы правильно заметили, быть способный для написания кода, подобного ASP 3, не обязательно делает это хорошей идеей!