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

Защо някой би искал да не използва код зад файла, така че сървърният код да е отделен от маркирането? Това не трябваше ли да е едно от предимствата на .NET пред класическия ASP?

Лично аз смятам, че смесването на код с маркиране прави кода много по-труден за разбиране.

Мразя да виждам тези проклети ‹% %> (блокове от страна на сървъра), свързани с маркиране, нара. Очаквам, че това е в ASP.NET единствено за обратна съвместимост с Classic 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 ви позволява да имате много добре организирани решения, но от вас зависи дали ще го направите. Наличието на код в код зад страници не е първата стъпка в това пътуване, а само откъде може да започне това пътуване.

Що се отнася до това защо вашите събития не се задействат, най-вероятно:

  • Събитието всъщност не се задейства. (Променяте ли избрания елемент в падащия списък, за да задействате действително това събитие?)
  • Всъщност нямате свързано събитие. В прозореца със свойства за тази контрола името на функцията за събитие съответства ли на въпросното събитие? (това е най-простият начин; можете също да използвате handles keywork във 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 код се разпространява с вграден код, просто защото е по-лесно да се разпространява по този начин. Той е самостоятелен, можете просто да го копирате и поставите в Notepad, да го запишете като .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