2012-10-22 5 views
1

마스터 페이지가 적용된 아래 양식을 제출하려고합니다.마스터 페이지에서 POST 방법 문제가 발생했습니다.

<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> 
    <p> 
     What is your name? 
     <asp:TextBox ID="YourName" runat="server" ClientIDMode="Static"></asp:TextBox> 
    </p> 

    <p> 
     What is your age? 
     <asp:TextBox ID="YourAge" runat="server" Columns="3" ClientIDMode="Static"></asp:TextBox> 
    </p> 

    <p> 
     What is your favorite color?<br /> 
     <asp:RadioButtonList ID="FavoriteColor" runat="server" ClientIDMode="Static"> 
     <asp:ListItem Selected="True">Red</asp:ListItem> 
     <asp:ListItem>Green</asp:ListItem> 
     <asp:ListItem>Blue</asp:ListItem> 
     </asp:RadioButtonList> 
    </p> 

    <p> 
     <asp:CheckBox ID="EatGreenEggsAndHam" runat="server" Checked="True" ClientIDMode="Static" 
     Text="Will You Eat Green Eggs and Ham?" TextAlign="Left" /> 
    </p> 

    <p> 
     <asp:Button ID="SubmitButton" runat="server" Text="Submit Form" 
      PostBackUrl="~/About.aspx" 
      onclick="SubmitButton_Click" /> 
    </p> 

</asp:Content> 

양식에서 제출 된 데이터를 가져 오기 위해 POST 메서드를 사용하려고합니다.

About.aspx 페이지에 내가 ID가 "YourAge"하지만 제출 된 폼 요소 식별자와 텍스트 상자에 입력 한 이름을 인쇄하려면 아래의 코드를

Response.Write(Request.Form["YourName"].ToString()); 

예상되는 동작입니다 사용하고있어

아래와 같이 변경

ctl00 $ MainContent $ Yourname 활용할

왜 이런 일이 발생 하는가? 나는 양식을 제출할 때이 "ctl00 $ MainContent $"부분을 제거 할 ID가 "Yourname 활용할"

enter image description here

으로 컨트롤의 값을 얻을 필요가있다. 양식 값을 검색하는 것은 필자의 범위를 벗어 났으며 일부 다른 사람들이 수행했습니다. 양식 값은 "ctl00 $ MainContent $ YourName"이 아닌 "YourName"으로 제출되어야합니다.

답변

1

ASP.net에서 제공하는 추상화를 활용하십시오. YourName.Text을 사용하여 YourName TextBox의 값을 검색 할 수 있습니다.

Response.Write(YourName.Text); 

또한 ctl00$MainContent$YourName는 생성 요소의 ID, 그러나 그것의 이름이 아니다. ID는 아마도 BodyContent_YourName과 같을 것입니다.

+0

chamara가 ASP.NET 4.0 클라이언트 ID 모드를 정적으로 사용하고 있기 때문에 id가 woul로 렌더링되므로 그냥 "YourName"이 될 것입니다 – Ramesh

+0

그가 Client ID 모드가 정적 인 ASP.NET 4.0을 사용하는 곳은 어디입니까? –

+0

ClientIDMode = "정적"은 ASP.NET 4.0 기능입니다. 심판 : http://www.west-wind.com/weblog/posts/2009/Nov/07/ClientIDMode-in-ASPNET-40 – Ramesh

1

처음에는 Request.Form에서 직접 읽는 것은 좋지 않습니다. 대부분의 경우 값을 읽으려면 YourName.Text을 사용해야합니다.

그러나 여전히 Request.Form에서 값을 읽으려면 ASP.NET 파이프 라인 및 http 프로토콜이 작동하는 방식을 이해해야합니다. 브라우저에서 페이지를 제출하면 브라우저는 키 값 쌍이있는 HTTP 요청을 만듭니다. 여기서 키는 입력 컨트롤의 "이름"을 나타내고 값은 해당 값을 나타냅니다.

코드에서 정적 인 ID 만 설정하고 이름은 설정하지 않습니다.

Response.Write(Request.Form[YourName.UniqueID].ToString()); 

아래의 고유 ID는 그래서, 당신은 내가 생각할 수있는이 SO Question

UDPATE

또 다른 접근 방법에 대해 설명 된 기술을 사용할 수 있습니다, ID와 같은 이름을 설정하는 것은 요소에 렌더링 된 이름이며 값을 가져 오는 데 동일한 이름을 사용할 수 있습니다. Request.Form

관련 문제