2012-10-22 58 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页我用下面的代码

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

预期的行为是打印在id为“YourAge”,但提交的表单元素ID文本框中键入名称已更改像下面

ctl00 $ $搜索Maincontent提供yourname

为什么会发生这种情况?我需要id为“YOURNAME”

enter image description here

得到控制的价值我想提交表单时删除该“ctl00 $ $搜索Maincontent”的一部分。检索表单值超出了我的范围,它由其他人完成。他们只需要将表单值提交为“YourName”而不是“ctl00 $ MainContent $ YourName”

回答

1

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

Response.Write(YourName.Text); 

此外,ctl00$MainContent$YourName是不会产生的元素的ID,但它的名字。该ID可能会像BodyContent_YourName

+0

中的值由于chamara使用ASP.NET 4.0客户端ID模式作为静态,所以该呈现的名称d只是“YourName” – Ramesh

+0

它在哪里说他正在使用客户端ID模式为静态的ASP.NET 4.0? –

+0

ClientIDMode =“Static”是ASP.NET 4.0的一项功能。 ref: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设置为静态而不是名称。因此,要设置名称相同ID,您可以使用此SO Question

UDPATE

另一种方法我能想到的描述的技术是如下

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

唯一ID呈现给元素的名称,您可以使用相同的方法获取Request.Form