从特定表格请求参数

时间:2014-05-07 09:54:32

标签: c# asp.net webforms

这是我的代码,我想从请求中获取值,但它会检索所有值,我不希望它这样做。请看一下。我正在使用C#。

    foreach (string itemm in Request.Params)
    {

        Response.Write(itemm.Substring(itemm.LastIndexOf("$") + 1) + "<br/>");
    }

这将检索所有值,但我有两种不同的形式我只想要form1中的值。可能吗?我已经进行了搜索,但我找不到任何答案。

1 个答案:

答案 0 :(得分:0)

似乎是Asp.Net,你只能有一个运行服务器端的表单元素。这意味着我们的ASP.Net HTML中可以有多个表单标签,但只有一个可以是服务器端。其余表单必须是客户端HTML表单

因此,所有服务器控件和用户控件必须嵌套在 main 表单中才能工作。因此,在检查回发时,服务器控件名称 - 值对总是来自主 <form runat="server">内的输入元素。

<强>更新

要回答原始问题以区分帖子,您可以始终在每个表单中使用相同的名称和开关/案例在预期值上放置隐藏的输入。您还可以在输入字段上使用命名约定

aspx

<!DOCTYPE html>
<html lang="en">
    <head runat="server">
    </head>
    <body>
       <form id="form1" runat="server">
           <input type="hidden" name="form.origin" value="first" />
           <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
       </form>
       <form id="form2" method="POST">
           <input type="hidden" name="form.origin" value="seccond" />
           <input type="submit" value="Post Second" />
       </form>
    </body>
</html>

代码

public partial class _Default : Page
{
    protected void Page_Load(object sender, EventArgs e) {
        switch (Request.Form["form.origin"]) {
            case "first":
                // first for has asp.net spesifics. Because its the main runat server form
                foreach (var key in Request.Form.AllKeys) {
                    Response.Write(string.Format("{0}: {1}", key, Request.Form[key]) + "<br/>");
                }                    break;
            case "second":
                //seccond form contains only values from the post.
                foreach (var key in Request.Form.AllKeys) {
                    Response.Write(string.Format("{0}: {1}", key, Request.Form[key]) + "<br/>");
                }                    break;
            default:
                break;
        }
    }

    protected void Button1_Click(object sender, EventArgs e) {

    }


}