2008-08-22 4 views
11

ASP.NET (C# -이 특정 질문에 대해서는 중요하지 않지만 전체 공개 및 모든 것)에 익숙해졌습니다. asp:- 스타일 컨트롤을 사용하면 저를 구할 수 있습니다. 많은 지루한 HTML 제작, 나는 종종 특정 행동에 좌절감을 느낍니다. 어제 밤 마스터 페이지에서 작업 할 때 발생했습니다. <asp:BulletedList ID="nav">은 HTML로 변환하면 <ul id="ct100_nav">이되었습니다.컨트롤 대 표준 HTML

다른 문제가 있습니다 - DataGrid를 자동 채울 때 필연적으로 필요하지 않은 결과 테이블에 특성을 추가하는 것으로 나타났습니다.

지루한 임무를 수행하기 위해 프레임 워크에 의존 할 때 받아 들여야하는 일정한 "컨벤션 오버 컨벤션"이 있음을 알고 있지만 이러한 경우의 "컨벤션"은 그렇지 않습니다. 많은 기존의 관례가 아니라 불필요한 추가 사항. 나는 을 알고 있는데, 왜 ID가 접두사를 추가하는지 알지만, 나는 이것을 조정할 수 있어야한다. 특히, 웹 표준 전도자로서 조금이라도 HTML ID가 한 페이지에 중복되지 않는다.

그래서 ASP.NET 개발자는 나보다 더 노련 해졌습니다. 앱 개발 및 배포 경험에서 이러한 컨트롤을 어떻게 활용합니까? 하드 코딩 된 HTML을 다시 사용하고 있습니까? 당신은 혼합을 사용합니까? 이 컨트롤에서 특유의 단점을 감안하여 HTML을 디자인하고 싶지는 않지만 가능한 경우 가능하면 활용하겠습니다.

할 소년은 무엇입니까?

답변

13

,

내가 표준 ASP.NET 컨트롤이 사내 물건에 대한 좋은 생각 도움이 없습니다 - 신속하고 더러운 좋은입니다 그 시나리오에서. 하지만 디자이너이기도 한 웹 개발자와 일하면서 ASP.NET 컨트롤을 사용하지 않고 HTML 코드 만 작성하고 필요한 경우 runat = "server"태그를 추가했습니다. 이것은 HTML이 어떻게 렌더링 될지 정확하게 알고 싶었 기 때문에 더 많은 것이 었습니다. 어쨌든 ASP.NET 컨트롤 중 일부는 표준을 준수하지 않았습니다.

중간에 HTML을 사용하고 적절하지 않은 경우 HTML을 사용합니다. CSS control Adapters

1

나는 또한 ASP.NET에 대한 나의 모험에 빠지며 비슷한 좌절감을 가지고 있습니다. 그러나 곧 익숙해집니다. 지루한 HTML 제작을하지 않는 이유는 ASP.NET 컨트롤이 모든 것을 수행하기 때문입니다..

컨트롤을 상속하고 거기에서 HTML 출력을 조정하는 경우에도 이러한 것들을 어느 정도 제어하거나 조정할 수 있습니다.

특정 컨트롤이 기본적으로 W3C 유효성 검사를 통과하지 못하는 과거에이를 수행해야했습니다. 그래서 나는 약간의 여분의 마크 업을 기본적으로 지나치게하여, 지나치게 간단히 수정하고 필요에 따라 편집했습니다. 분) ..

나는 통제 시스템이 어떻게 작동하는지에 관해 배우게된다. 그 다음 당신 자신을 약간 노크한다, 이것은 내가 두포의 아래에서 계속하고있는 것을 실제로 도왔다. 그래서 내가 어떤 문제라도 얻으면, 나는 가지고있다. 어디로 갈지 생각해.

+0

"ASP.NET 컨트롤이 모든 것을 해줍니다."- 예,하지만 * * * 틀리게 – annakata

+0

나는 다소 그 반대가 있습니다. 나는 프로그래머가 아닌 프로그래머가되기 위해 노력합니다. 사람들이 일부 ASP.NET 응용 프로그램에서 생성 된 마크 업이 얼마나 깨끗한 지에 대해 의견을 말하게했습니다. 많은 표준 컨트롤이 정상입니다. ViewState에 많이 의존 할 때만 ViewState가 싫습니다. :) –

2

서버 컨트롤의 ID는 다음과 같습니다. ClientID에 액세스하면 브라우저에 실제로 쓰게 될 ID를 찾을 수 있습니다. 그렇게하면 서버 측 클라이언트 측 스크립팅을 결합 할 수 있지만 여전히 하드 코드하지 않아도됩니다. _id = "ct100_nav"_

업데이트가있을 경우 항상 HTML을 "해킹"하는 대신 포함 된 컨트롤을 사용하려고합니다. 또는 나중에 약간의 개선이 이루어질 때마다 모든 코드가 프레임 워크를 대체하여 계속 작동하므로 HTML을 변경할 필요가 없습니다. 당신이 ... 당신이 .ClientID 속성 서버 측이 나중에 JS 또는 무언가를 사용하여 액세스하는 ASP.NET에 의해 추가 된 ID의 접두사이 문제가되는 경우

희망이

0

을하는 데 도움이됩니다.

ASP.NET에서 추가 한 오버 헤드가 있으면 방출 된 HTML을 완전히 제어 할 수있는 ASP.NET MVC (여전히 미리보기)를 고려해야합니다.

나도 추가 거즈로 모든 것을 좋아하지 않기 때문에 내가 MVC로 이동하고 있습니다 ....

2

@ 브라이언, 아, 그래! 거의 모든 동작을 제어 할 수 있습니다. 사용자 지정 컨트롤 (세 가지 유형이 있습니다)을 만드는 방법을 고려해보십시오. 최근에 내 질문에 그들에 대한 개요를 준 here.

나는 것 강하게을 체크 아웃하는 것이 좋습니다, 나에게 끝 : 개인적으로

0

대부분의 대답은 디자이너의 관점을 생각합니다. 중소 프로젝트에서는 코드와 CSS/HTML을 동기화하고 표준을 준수하고 깨끗하게 처리하는 오버 헤드처럼 보일 수 있습니다. 디자이너가 할 수있는 방법은 렌더링 된 HTML을 완전히 제어하는 ​​것입니다. 그러나 ASP.NET에서 모든 것을 완벽하게 제어 할 수있는 방법은 여러 가지가 있습니다. 그리고 나를 위해, aspx/ascx 파일에 필요한 HTML을 가지는 것이 가장 확장 불가능하고 더러운 방법입니다. CSS를 통해 컨트롤 스타일을 지정하려는 경우 CssClass 속성을 통해 서버 측 클래스를 항상 설정할 수 있습니다. JS를 통해 액세스하려는 경우 서버 ID가 올바른 JS를 다시 내보낼 수 있습니다. 이것이 제공하는 단점은 개발자와 디자이너가 긴밀하게 협력해야한다는 것입니다. 어떤 거대한 프로젝트에서 이것은 어쨌든 피할 수없는 것입니다. 그러나 ASP.NET이 제공하는 이점은 이러한 어려움보다 훨씬 큽니다. 표준 준수 HTML, 스키닝 지원 및 렌더링 된 마크 업을 제어하기위한 기타 기능을 원할 경우 항상 타사 컨트롤을 사용할 수 있습니다.

1

HTML은 ID 충돌을 방지하는 ASP.NET의 방식이므로 이러한 종류의 ID로 렌더링됩니다. 마스터 페이지 또는 마법사 컨트롤과 같은 각 컨테이너 컨트롤은 해당 하위 ID에 "ID_"를 추가합니다.

글 머리 기호 목록의 경우 ListView는 좋은 중간 지점을 제공합니다. 여전히 데이터 소스에 바인딩 할 수는 있지만 렌더링 된 HTML을 훨씬 더 강력하게 제어 할 수 있습니다. 스콧 구 여기의 ListView에 좋은 소개가 있습니다. "이 ID 충돌을 방지 ASP.NET의 방법"

데이브 워드는 이미 언급 한 바와 같이

http://weblogs.asp.net/scottgu/archive/2007/08/10/the-asp-listview-control-part-1-building-a-product-listing-page-with-clean-css-ui.aspx

0

아주 좋은 예는 사용자 지정 컨트롤 안에 컨트롤을 넣은 다음 리피터에서 해당 사용자 지정 컨트롤을 사용하여 사용자 지정 컨트롤의 HTML이 페이지에 대해 여러 번 출력되도록하는 경우입니다.

JavaScript에 대한 컨트롤에 액세스해야하는 경우, ClientScript 속성에 액세스하여 ClientScriptManager에 액세스하고이 방법으로 스크립트를 페이지에 등록하십시오. 참조 할 컨트롤의 ClientID 속성을 사용하도록 스크립트를 작성할 때 컨트롤의 ID를 입력하는 대신 참조해야합니다.

4

짧은 대답은 당신이 ASP를 사용해서는 안된다는 것입니다 : ...버전의 표준 HTML 컨트롤을 당신이 정말로 좋은 이유가 없다면.

주니어 개발자는 대부분의 ASP.NET 설명서에서 다루기 때문에 컨트롤을 사용하는 경우가 많으므로 더 나은 기능이 있다고 가정합니다. 그들은 아니다. 이 시점에서, 매일 ASP.NET을 개발한지 8 년이 지난 지금, ASP를 사용하는 것이 실제로 의미있는 2 ~ 3 가지 경우에 대해서만 생각할 수 있습니다. 표준 HTML에 대한 INPUT 컨트롤.

13

저는 실제로 여기 내 의견에 동의하는 몇몇 의견을 보았습니다. 템플릿 언어로서의 ASP.NET은 매우 열악합니다. 난 그냥 (!에 flamesuit) 여기에서 프로 포인트의 몇 가지를 반박하고 싶습니다

:

데이브 워드는 ID 충돌을 언급 - 이것은 사실이지만, 내 얼마나 심하게 처리. xpath 또는 deep css 셀렉터가 참조하는 노드를보기보다는 클라이언트 ID와 같은 ASP.NET 내부로 지연시키는 것 외에는 ID를 효과적으로 쓸모 없게 만드는 것이 더 좋았을 것입니다. CSS와 JS를 쓰면 훨씬 더 힘들었습니다.

롭 쿠퍼 (Rob Cooper)는 컨트롤이 HTML을 대체하는 방법에 대해 이야기합니다. (Rob의 말을 의역하고 용서해주십시오.) 기존의 이해가 잘 된 언어를 사용하고 "아니야. 지금 우리의 일을해라. "그리고 그들의 길은 입니다. 매우은 잘못 구현되었습니다. 예 : asp : panel은 한 브라우저에서 테이블을 렌더링하고 다른 브라우저에서는 div를 렌더링합니다. 문서화 또는 실행이 없다면 로그인 컨트롤 (및 많은 다른 것들)에 대한 마크 업은 예측할 수 없습니다. 디자이너에게 CSS를 쓰려면 어떻게해야할까요?

Espo는 플랫폼이 html을 변경하는 경우 컨트롤이 추상화의 이점을 제공하는 방법에 대해 씁니다. 물론 이것은 명확하게 원형입니다 (플랫폼이 변경되어 변경되기 때문에 변경이 필요하고 자신 만의 HTML 대신에) 실제로 문제를 만듭니다. 컨트롤이 업데이트로 다시 변경되면 내 CSS가 어떻게 대처해야합니까?

사과 학자들은 "그렇지만 구성에서 이것을 변경할 수 있습니다"라고 말하거나 제어 및 사용자 정의 컨트롤을 무시하는 것에 대해 이야기 할 것입니다. 그럼 왜해야합니까? 이러한 문제 중 일부를 수정하기위한 CSS 제어 도구 패키지는 비상식 마크 업이며 ID 문제를 해결하지 못합니다.

MVC (3.5 구현이 아닌 추상적 개념)를 Webform 앱과 함께 구현하는 것은 불가능합니다. 왜냐하면 이러한 컨트롤이보기 및 제어를 밀접하게 묶어주기 때문입니다. CSS와 JS의 별도 도메인이었던 것을 구현하기 위해 서버 사이드 코드에 관여해야하기 때문에 기존의 웹 디자이너에게는 진입 장벽이 있습니다. 나는이 사람들을 공감한다.

컨트롤이 특정 프로필의 앱을 매우 빠르게 개발할 수 있다는 Kiwi의 견해와 강력하게 동의하며, 어떤 이유로 든 프로그래머가 HTML을 불쾌감으로 느끼고, ASP의 다른 부분에 이점이 있다는 것을 인정합니다. NET에서 이러한 컨트롤이 필요합니다, 수 있습니다 가치가 가치가있다.

그러나, 내가 제어의 손실을 원망, 나는 생각이 잘못된 단계는 거꾸로 코드 숨김에서 클래스, 스타일과 스크립트 같은 것들을 처리의 모델을 느끼고, 본인은 템플릿에 대한 더 나은 모델 (이 있다는 것을 느낀다 microformats 및 xslt 구현)이 있지만 컨트롤을 대체하는 것은 사소한 일입니다.

ASP.NET은 램프와 레일의 관련 기술에서 많은 것을 배울 수 있다고 생각합니다. 그 때까지는 3.5 MVC로 작업 할 수 있기를 바랍니다.

+0

나는 내가 오늘 upvotes에서 빠져 나오기를 바란다. – NotMe

+0

나는 당신에게서 나쁜 대답을 본 적이 없다고 생각합니다. –

0

당신이 렌더링 된 HTML을 통해 많은 컨트롤을 대신 ASP.NET MVC 들여다 것을 원하는 경우 (미안 그 </호언 장담 > 너무 오래했다).