我正在尝试提交以下表单,其中应用了母版页。
<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());
预期的行为是打印名称为“YourAge”的文本框中键入的名称,但提交的表单元素ID已更改如下
ctl00 $ $搜索Maincontent YOURNAME
为什么会这样?我需要使用id“YourName”
获取控件的值
我想在提交表单时删除此“ctl00 $ MainContent $”部分。检索表单值超出了我的范围,并且由其他人完成。他们只要求将表单值提交为“YourName”而不是“ctl00 $ MainContent $ YourName”
答案 0 :(得分:1)
尝试利用ASP.net提供的抽象。您可以使用YourName.Text
来检索YourName TextBox的值。
Response.Write(YourName.Text);
此外,ctl00$MainContent$YourName
不是生成的元素的ID,而是其名称。 ID可能类似于BodyContent_YourName
。
答案 1 :(得分:1)
首先,不建议直接从Request.Form
读取。大多数情况下,您应该使用YourName.Text
来读取值。
但是,如果您仍想阅读Request.Form
中的值,则需要了解ASP.NET管道和http协议的工作原理。当您从浏览器提交页面时,浏览器会创建一个带有键值对的HTTP请求,其中键表示输入控件的“名称”,而值表示相应的值。
在您的代码中,您只将ID设置为静态而不是名称。因此,要将名称设置为与ID相同,您可以使用针对此SO Question
所述的技术<强> UDPATE 强>
我能想到的另一种方法如下
Response.Write(Request.Form[YourName.UniqueID].ToString());
唯一ID是呈现给元素的名称,您可以使用它来从Request.Form