2011-04-07 2 views
0

내 문제는 .net 컨트롤없이 사용자 지정 aspx 페이지를 만드는 디자이너가 있다는 것입니다. 컨트롤을 동적으로 추가하는 방법이 필요합니다. 지금까지는 컨트롤의 유일한 유형은 텍스트 상자와 버튼이지만 텍스트 상자의 이름, 전화 번호, 이메일 등 30 가지 변형이 있습니다. 또한 텍스트 상자가 필요할 수도 있고하지 않을 수도 있습니다. 텍스트 상자가 추가되면 양식이 db로 제출됩니다.asp.net 동적으로 usercontrols를 추가하고 위치를 지정

내 첫 번째 생각은 디자이너에게 [이름]과 같은 것을 넣은 다음 이름 텍스트 상자와 필수 필드 유효성 검사기가있는 사용자 정의 컨트롤로 바꾸는 것이 었습니다. 유효성 검사기를 사용해야하는지 결정하기 위해 장소 소유자가 [name; val] 또는 [name; noval]처럼 보일 수 있다고 생각했습니다. 나는 코드에서 place holder를 동적으로 대체하거나 사용자가 자신의 html을 텍스트 상자에 붙여 넣은 다음 aspx 페이지를 만드는 데 필요한 코드를 내 보낸 버튼을 클릭하는 도구를 설정할 수 있습니다.

나는 더 나은 방법이 있어야하지만 상당히 독특한 문제이므로 어떤 대안도 찾을 수 없었을 것입니다. 누구든지 아이디어가 있습니까?

감사합니다,

커크

+2

디자이너가 ASP.NET 컨트롤을 직접 사용할 수없는 이유는 무엇입니까? 마크 업은 이러한 활동을 지원하기 위해 코드와 분리되었습니다. – Alessandro

+0

귀하의 디자이너가 당신에게 불만을 제기하고 있습니다. 그를 디자인하는 것이 더 쉬울 것이고, 컨트롤을 추가하고 스타일을 지정하는 것이 더 쉬울 것입니다. .NET 컨트롤을 사용할 수 없다는 것은 어리 석다. – FreeAsInBeer

+0

양식을 신속하게 작성하기 위해이 작업을 수행하라는 요청을 받았습니다. 디자이너가 왜 스스로 컨트롤을 정직하게 배치 할 수 없는지 확신 할 수 없다. – kbt5001

답변

0

당신의 디자이너가 당신이 페이지를 html로 제공 경우, 그냥 새로운 웹 사이트를 만들 수 있습니다. 이미지 폴더가있는 모든 HTML 페이지를 복사하여 프로젝트에 모두 페이지로 복사하십시오. 모든 HTML 페이지에 대해 aspx 페이지를 만들고 (같은 이름으로) aspx 페이지와 body 복사본 사이에있는 HTML 태그를 복사하고 페이지에 넣고 aspx 페이지 사이에 HTML 페이지의 태그를 붙여 넣습니다. 이제 html 페이지와 정확히 같은 aspx 페이지가 있습니다.

+0

이 문제는 기본적으로 폼이 생성 될 때 기본적으로 관련이 없을 것이라는 점이다. 이 목적은 디자이너와 부서가이 양식을 독립적으로 만들 수 있도록 허용하는 것입니다. – kbt5001

+0

별도의 부서에서 디자이너와 작업 할 때도 동일한 문제가있었습니다. 디자이너의 컴퓨터에 VS 2010 Express를 설치하여 문제를 해결하고 VS 디자이너의 모든 것을 수행하는 방법을 생각했습니다. 그런 다음 많은 시간을 절약했습니다. – Ali

0

어떤 솔루션을 과도하게 설계하려고 시도하는 것 같습니까? 이어야합니다.

위의 설명에서 @Alessandro가 언급했듯이 디자이너가 제어 마크 업이있는 페이지를 제공하지 않는 이유는 무엇입니까? 현재로서는 디자이너가 "맞춤 HTML 페이지"만큼 "맞춤형 aspx"를 제공하지 않습니다. 디자이너가 ASPX를 약속하지만 HTML 만 제공하는 경우 비즈니스 요구 사항의 어딘가에서 오해가됩니다.

그러나 디자이너가 HTML 만 제대로 제공한다고해도 문제가되지는 않습니다. 최악의 경우 서버에서 필요한 각 요소를 runat="server"으로 설정하여 서버 측에서 액세스 할 수 있습니다. 또는 아마도 해당 컨트롤에 대한 ASPX 컨트롤 마크 업으로 대체하기 만하면됩니다.

0

[...] 태그를 인식하고 해당 컨트롤로 바꿀 간단한 구문 분석기를 작성하십시오. 꽤 쉽게 할 수 있고 종종 이것을했습니다 ... 내가 사용하는 태그는 대개 $$ (..)입니다. 하지만 파서가 태그를 알고있는 한 그것은 중요하지 않습니다.

이러한 파서는 두 가지 상태가 될 수있는 간단한 상태 머신으로 구성됩니다. 텍스트 모드 또는 태그 모드. 전체 페이지 텍스트, char 문자를 반복하십시오. 텍스트 모드에있는 한 각 문자는 임시 버퍼에 계속 추가됩니다. tag-mode가 생기 자마자 임시 버퍼의 내용으로 LiteralControl을 생성하고 Control-tree의 맨 아래에 버퍼를 추가하고 버퍼를 emtpy합니다.

이제 각 문자를 버퍼에 계속 추가하지만 텍스트 모드를 다시 누르면 버퍼 내용을 분석하고 올바른 컨트롤을 만들 수 있습니다. 간단한 전환 사례 문일 수 있습니다.컨트롤을 컨트롤 트리의 맨 아래에 추가하고 나머지 문자를 반복하여 끝까지 읽고 텍스트 모드와 태그 모드 사이를 전환하여 LiteralControls 및 구체적인 컨트롤을 추가합니다.

이러한 파서의 간단한 예는 메모장에 4 분 안에 기록했지만 아이디어를 얻어야합니다.

foreach (var c in text) 
{ 
    buffer.Append(c); 

    if (c== '[' && mode == Text) 
    { 
     mode = Tag; 

     Controls.Add(new LiteralControl(buffer)); 
     buffer.Clear(); 
    } 

    if (c == ']' && mode == Tag) 
    { 
     mode = Text; 

     switch (buffer) 
     { 
     case "[name]": Controls.Add(new NameControl()); 
     ... the rest of possible tags 
     } 

     buffer.Clear(); 
} 
+0

나는이 라인을 따라 무엇인가를하려고 생각하고 있었다. 나는 내가 생각하지 못했던 더 나은 방법이 있는지 궁금해. 덕분에 – kbt5001

+0

정규식 일치를 수행하고 일치 항목의 시작 및 끝 인덱스를 사용하여 텍스트를 추출 할 수 있지만 이처럼 간단한 구문 분석기는 항상 빠릅니다. –

관련 문제