ASP.NET WebForms 表单未发布 - 为什么?

问题描述 投票:0回答:3

虽然我不认为自己是一个网络程序员,但我已经完成了大量的网络编程,所以我几乎不好意思问下面的代码有什么问题。 我肯定忽略了有关 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 似乎有一些我没有看到的技巧。

asp.net http webforms
3个回答
5
投票

您可以从表单标记中删除 runat="server",因为您想选择退出 ASP.NET 为您提供的服务器控件。您基本上正确地认为这应该可以工作,而不需要所有 ASP.NET 页面处理位。

这是您需要进行的一个小更改 - 您需要在输入控件上使用“name”而不是“id”,以便它们出现在 Form 集合中。这是一件微妙的事情,但我相信它并不是 ASP.NET 独有的 - name 属性指定在 POST 变量集合中将值与什么关联。

请参阅 HTML 输入 - 名称与 id 了解有关 id 与名称的更多信息

祝你好运


3
投票

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>

0
投票

就我而言,这是因为

FriendlyUrlSettings.AutoRedirectMode
RouteConfig
我删除了这一行然后就可以了。

public static class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        var settings = new FriendlyUrlSettings();
        //settings.AutoRedirectMode = RedirectMode.Permanent;
        routes.EnableFriendlyUrls(settings);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.