2009-11-14 3 views
2

나는 모든 페이지에 검색 양식을 가지고 있으므로 마스터 페이지에 넣습니다. 그 양식에 runat=server을 추가 한 후 이제 다른 형태의 runat 서버를 사용할 수 없습니다.)asp.net 양식 runat 서버

사람들은 대개 어떻게이 문제를 해결합니까?

하나의 아이디어는 전체 페이지를 하나의 양식 runat=server으로 둘러싼 다음 하나의 하위 페이지 (예 : 연락처)에 사용되는 양식의 경우에도 마스터 페이지에 코드가 있어야합니다.

사람들은 일반적으로이 문제를 어떻게 해결합니까?

thnx

답변

7

이것은 종종 ASP.NET에서 가장 문제가되는 디자인 결정 중 하나로 간주되었습니다. 이 한 페이지 당 하나의 원칙에 맞춰 해결하는 것은 슬픈 일입니다.

여러 가지 양식이 필요할 수있는 한 가지 이유는 기본 버튼이 브라우저에서 제출 버튼으로 설정된다는 것입니다. 검색 창에 입력하고 Enter 키를 누른 사람이 메인 폼 (로그인 페이지라고 가정)을 제출해서는 안되지만 검색 버튼은 아주 작습니다.

이 문제를 해결하는 가장 쉽고 "표준적인"방법은 asp : Panel을 사용하고 DefaultButton 속성을 설정하는 것입니다. 검색 필드와 검색 버튼을 모두 포함하는 부분을 둘러 쌀 수 있습니다.

전체 페이지를 감싸는 마스터 페이지 내부에서 <form>을 코딩하는 것에 대해 걱정할 필요가 없습니다. 그것은 일반적인 디자인입니다. 대부분의 서버 컨트롤에는 양식이 필요하므로 관계없이 포함 시키면됩니다.

+0

나는 본다. 나는 단지 마스터 페이지의 한 페이지에있을 양식을 코딩하는 것이 잘못된 것이라고 생각했습니다. 어떻게 든 제게 잘 앉지 않습니다 : P하지만 당신이 말했듯이 그것은 일반적인 디자인 일 것입니다, 아마도 제가해야합니다. thnx. – b0x0rz

+1

ASP.NET의 시작 부분에서 MS가 페이지 당 하나의 형식 만 갖는이 디자인을 선택한 이유에 대해 종종 눈살을 찌푸리게했습니다. 장점 (단순성은 복잡성을 선호)과 단점 (특정 전통적 접근법은 재고 할 필요가 있음)이 있습니다. 또한 해결 방법이 있지만 올인원 내 충고는 다음과 같습니다.이 디자인을 고수하고 기능을 사용하고 실제로 그 결과를 완전히 이해하고 완벽하게 이해할 때 "기본이 아닌"디자인 패턴을 작성하기 시작하십시오. – Abel

1

, 왜 여러 RUNAT = "서버"형태를 갖고 싶어한다 첫 번째 질문?

페이지에 runat="server"이없는 양식이나 Button 컨트롤에 PostBackUrl 속성을 사용하여 다른 ASP.NET 페이지에 게시 할 수 있습니다.

다중 단계 프로세스에서 데이터를 수집하려면 ASP.NET 마법사 컨트롤을 살펴 보거나 Scott Guthrie의 blog post here을 참조하십시오.

또는 자신을 관리하고 ASP.NET 패널을 사용하거나 이미 언급 한 PostBackUrl을 사용하여 ASP.NET 페이지에서 다른 페이지로 이동할 수 있습니다.

+0

잘 (? - 왜 당신은 무엇을 하시겠습니까 정말 확실하지 당신은 언급 정확히) - 내가 몇 가지 복잡한 작업을 수행해야 검색을 위해 파싱 한 후 다음 페이지로 이동하십시오. 또한 연락처 (예를 들어)에 대한 DB 삽입 아마도 어쩌면 다음 페이지로 이동과 같은 몇 가지 할 싶어요. – b0x0rz

+0

아, ok (수정 후). 글쎄, 나는 다음과 같은 두 가지 형식을 구분하는 방법을 모르겠다. 하나는 항상 사용되므로 마스터 페이지에 있어야하고, 다른 페이지는 단일 페이지에 있어야합니다 (그곳에서만 사용되기 때문에).Abel (이 페이지)은 두 번째 양식이 하나의 하위 페이지에서만 사용 되더라도 마스터 페이지에 모든 코드를 포함하는 것이 좋다고 언급했습니다. – b0x0rz

+1

* "모든 코드"*는 '

'태그를 의미합니다. 어쨌든 (어쩔 수없이) 예외를 두어야 만하기 때문에 마스터에 두는 것이 관례입니다. 개인적으로 필자는 종종 2 레벨 마스터를 사용합니다. 즉, 깨끗한 폼없는 루트 마스터와 루트 마스터 (마스터가 중첩 될 수 있음)를 상속하는 여러 하위 마스터를 사용합니다. 그렇게하면 유연성을 잃지 않고 필요한만큼 페이지 단위로 결정할 수 있습니다. 궁극적으로 가장 적절한 상황에 달려 있습니다. – Abel

2

난 당신이 =

<form action="Search.aspx" method="get"> 
    <input type="text" name="q" /><input type="submit" /> 
</form> 

사용 방법과 같이, 마스터 페이지/RUNAT O = 서버 w 검색 HTML 양식을 가능성이 검색의 URL을 가지고 가야하는 것이 좋습니다 것입니다. 그리고 당신은 Search.aspx의 코드 숨김에서 쿼리와 함께 무엇을해야 할 :

public void Page_Load(object sender) 
{ 
    string q = Context.Request.QueryString["q"]; 
    /*...*/ 
} 
관련 문제