虽然我不认为自己是一个网络程序员,但我已经完成了大量的网络编程,所以我几乎不好意思问下面的代码有什么问题。 我肯定忽略了有关 ASP.NET 的一些基本知识。
我有两个页面,source.aspx和destination.aspx:
source.aspx - html:
<body>
<form id="form1" action="destination.aspx" method="post" runat="server">
<input id="Text1" type="text" />
<input id="Text2" type="text" />
<input id="Checkbox1" type="checkbox" />
<input id="Submit1" type="submit" value="submit" />
</form>
</body>
destination.aspx - 背后代码:
protected void Page_Load(object sender, EventArgs e)
{
// Below variable gets assigned null.
string text1 = Request.Form["Text1"];
}
当我提交source.aspx表单时,一旦到达destination.aspx表单,FORM变量中就没有信息了。 我认为“runat="server"”形式将确保我最终进入 ASP.NET 页面管道,事实上我可以单步执行此代码。 除了视图状态之外,没有 POST 表单变量,并且 PARAMs 集合也没有任何与控件数据相对应的内容,甚至没有与修饰控件名称相对应的数据。 问题是,发生了什么使我发布的变量“消失”,至少在目标页面上?
我不是在寻找替代方案来完成这项工作(即使用 runat="server" 等来制作控件服务器控件)。 我可以解决这个问题。 我试图确定的是“ASP.NET 中的什么因素导致我的控件似乎无法被目标页面接收”。 谢谢 - 我以为我对 HTTP 理解得很好,但 ASP.NET 似乎有一些我没有看到的技巧。
您可以从表单标记中删除 runat="server",因为您想选择退出 ASP.NET 为您提供的服务器控件。您基本上正确地认为这应该可以工作,而不需要所有 ASP.NET 页面处理位。
这是您需要进行的一个小更改 - 您需要在输入控件上使用“name”而不是“id”,以便它们出现在 Form 集合中。这是一件微妙的事情,但我相信它并不是 ASP.NET 独有的 - name 属性指定在 POST 变量集合中将值与什么关联。
请参阅 HTML 输入 - 名称与 id 了解有关 id 与名称的更多信息
祝你好运
Request.Form 使用元素中的 name 属性。所以你应该为每个 html 元素写入 name 属性。
<body>
<form id="form1" action="destination.aspx" method="post" runat="server">
<input id="Text1" name="Text1" type="text" />
<input id="Text2" name="Text2" type="text" />
<input id="Checkbox1" name="Checkbox1" type="checkbox" />
<input id="Submit1" type="submit" value="submit" />
</form>
</body>
就我而言,这是因为
FriendlyUrlSettings.AutoRedirectMode
在RouteConfig
我删除了这一行然后就可以了。
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
//settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
}
}