这是我的代码,我想从请求中获取值,但它会检索所有值,我不希望它这样做。请看一下。我正在使用C#。
foreach (string itemm in Request.Params)
{
Response.Write(itemm.Substring(itemm.LastIndexOf("$") + 1) + "<br/>");
}
这将检索所有值,但我有两种不同的形式我只想要form1中的值。可能吗?我已经进行了搜索,但我找不到任何答案。
答案 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) {
}
}