1

マスターページが適用されている以下のフォームを送信しようとしています。

<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ページで、以下のコードを使用しています

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

予想される動作は、テキストボックスに入力された名前を ID "YourAge" で出力することですが、送信されたフォーム要素 ID は以下のように変更されています

ctl00$MainContent$あなたの名前

なぜこれが起こるのですか?ID「YourName」のコントロールの値を取得する必要があります

ここに画像の説明を入力

フォーム送信時にこの「ctl00$MainContent$」の部分を削除したいです。フォームの値を取得することは私の範囲外であり、他の人によって行われています。フォームの値を「ctl00$MainContent$YourName」ではなく「YourName」として送信する必要があるだけです。

4

2 に答える 2

1

ASP.net が提供する抽象化を利用してみてください。YourName.TextYourName TextBox の値を取得するために使用できます。

Response.Write(YourName.Text);

また、ctl00$MainContent$YourName生成された要素の ID ではなく、その名前です。ID はおそらく のようなものになりますBodyContent_YourName

于 2012-10-22T08:05:27.833 に答える
1

そもそも、から直接読み取るのはお勧めできませんRequest.Form。ほとんどの場合、 を使用しYourName.Textて値を読み取る必要があります。

ただし、それでも値を読み取りたい場合はRequest.Form、ASP.NET パイプラインと http プロトコルがどのように機能するかを理解する必要があります。ブラウザーからページを送信すると、ブラウザーはキーと値のペアを使用して HTTP 要求を作成します。キーは入力コントロールの「名前」を表し、値は対応する値を表します。

コードでは、ID のみを静的に設定していますが、名前は設定していません。したがって、ID と同じ名前を設定するには、このSO の質問で説明されている手法を使用できます。

アップデート

私が考えることができる別のアプローチは以下のとおりです

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

一意の ID は、要素にレンダリングされる名前であり、要素から値を取得するために同じものを使用できます。Request.Form

于 2012-10-22T08:11:05.170 に答える