Asp.net 使用母版页发布方法问题

Asp.net 使用母版页发布方法问题,asp.net,forms,post,submit,master-pages,Asp.net,Forms,Post,Submit,Master Pages,我正在尝试提交下面的表格,其中应用了母版页 <asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent"> <p> What is your name? <asp:TextBox ID="YourName" runat="server" ClientIDMode="Static"></asp:TextBox> <

我正在尝试提交下面的表格,其中应用了母版页

<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>
预期的行为是打印文本框中键入的名称,id为“YourAge”,但提交的表单元素id已更改,如下所示

ctl00$MainContent$YourName

为什么会发生这种情况?我需要获取id为“YourName”的控件的值


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

尝试使用ASP.net提供的抽象。您可以使用
YourName.Text
检索YourName文本框的值

Response.Write(YourName.Text);

另外,
ctl00$MainContent$YourName
不是生成的元素的ID,而是它的名称。ID可能类似于
BodyContent\u YourName

首先,不建议直接从
请求中读取。表单
。大多数情况下,您应该使用
YourName.Text
读取值

但是,如果您仍然希望从
Request.Form
读取值,则需要了解ASP.NET管道和http协议的工作原理。当您从浏览器提交页面时,浏览器将创建一个带有键值对的HTTP请求,其中键值表示输入控件的“名称”,而值表示相应的值

在代码中,您只是将ID设置为静态,而不是名称。因此,要将名称设置为与ID相同,可以使用为此描述的技术

Udpate

我可以想到的另一种方法如下

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

唯一ID是呈现给元素的名称,您可以使用它从
请求中获取值。Form

由于chamara使用ASP.NET 4.0客户端ID模式作为静态,呈现的ID将只是“YourName”,它说他正在使用ASP.NET 4.0和客户端ID模式static?clientdmode=“static”是ASP.NET 4.0的一项功能。ref:@chamara ClientIDMode只影响输入元素的ID属性。
Request.Form
将包含输入元素的name属性。因此,它没有按预期工作。
Response.Write(Request.Form[YourName.UniqueID].ToString());