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$YourName

为什么会这样?我需要使用 id "YourName" 获取控件的值

在此处输入图像描述

我想在提交表单时删除这个“ctl00$MainContent$”部分。检索表单值超出了我的范围,它是由其他人完成的。他们只要求将表单值提交为“YourName”而不是“ctl00$MainContent$YourName”

4

2 回答 2

1

尝试利用 ASP.net 提供的抽象。您可以使用YourName.Text检索YourName 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 Question描述的技术

更新

我能想到的另一种方法如下

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

唯一 ID 是呈现给元素的名称,您可以使用它来从Request.Form

于 2012-10-22T08:11:05.170 回答