当我从一个页面发布到另一个页面时,为什么我的 Asp.Net 表单到达时是空的?

发布于 2024-08-25 10:35:46 字数 598 浏览 7 评论 0原文

我有以下 HTML 代码

<%@ Page Language="C#" %>

<html>
    <head>
        <title></title>
    </head>
    <body>
        <form id="frmSystem" method="post" action="target.aspx">
            <input id="txtTextField" type="text" />
            <input id="btnPost" value="Submit" onclick="javascript:frmSystem.submit();" type="button" />
        </form>
    </body>
</html>

目标页面即将出现,但它接收的表单是空的。我的 target.aspx 页面上有一个断点,虽然我可以看到一个表单,但它的键是空的,并且 Request["txtTextField"] 没有给我任何信息。

有什么线索吗?

I have the following HTML Code

<%@ Page Language="C#" %>

<html>
    <head>
        <title></title>
    </head>
    <body>
        <form id="frmSystem" method="post" action="target.aspx">
            <input id="txtTextField" type="text" />
            <input id="btnPost" value="Submit" onclick="javascript:frmSystem.submit();" type="button" />
        </form>
    </body>
</html>

The target Page is coming up but the form that it is receiving is empty. I have a break point on my target.aspx page and while I can see a form, it's keys are empty and Request["txtTextField"] gives me nothing.

Any clue why?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

亣腦蒛氧 2024-09-01 10:35:46

如果您使用 ASP.NET MVC,则需要使用“name”属性而不是“id”设置输入名称。

If you are using ASP.NET MVC, the input names need to be set with the "name" attribute rather than "id".

带刺的爱情 2024-09-01 10:35:46

您可能会在事件处理程序(例如 page_load)中重置表单值。

You probably reset the form value in event handlers (such as page_load).

勿忘初心 2024-09-01 10:35:46

如果您像我一样使用 ASP.NET 4.5,请使用以下提示

  • 在 Web 表单项目中禁用自动友好 URL
    • settings.AutoRedirectMode = RedirectMode.Off; // 在 RouteConfig.cs 中
  • 如果可以的话:
    • 从表单元素中删除 action="CILandingPage.aspx"
    • 放置一个 asp:button 而不是普通按钮
    • 在您的 asp:button 上设置 PostBackUrl="~/CILandingPage.aspx"

更多资源对我有用的详细信息

If you are using ASP.NET 4.5 like me, use below hints

  • Disable auto Friendly URLs in a Web Form project
    • settings.AutoRedirectMode = RedirectMode.Off; // in RouteConfig.cs
  • if you can:
    • remove action="CILandingPage.aspx" from form element
    • put a asp:button instead of normal button
    • set PostBackUrl="~/CILandingPage.aspx" on your asp:button

more resources with more detail that was useful to me

人│生佛魔见 2024-09-01 10:35:46

另一种选择是在 Global.asax.cs 上的 Application_BeginRequest 中捕获您的 Request.Form[] 数据:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    //capture form data and preserve in query string
    if (Request.Form["txtTextField"]!= null)
    {
        Response.Redirect(Request.RawUrl + "?txtTextField=" 
          + Request.Form["txtTextField"]);
    }
    //or preserve in Session variable
    if(Request.Form["txtTextField"]!=null)
    {
        Session["txtTextField"]=Request.Form["txtTextField"];
    }
}

问题是,表单数据在友好Urls应用的自动重定向中丢失 - 如果您将该数据存储为除表单数据时,无需关闭FriendlyUrls或将AutoRedirectMode设置为RedirectMode.Off。

Another option is to capture your Request.Form[] data in Application_BeginRequest on the Global.asax.cs:

protected void Application_BeginRequest(object sender, EventArgs e)
{
    //capture form data and preserve in query string
    if (Request.Form["txtTextField"]!= null)
    {
        Response.Redirect(Request.RawUrl + "?txtTextField=" 
          + Request.Form["txtTextField"]);
    }
    //or preserve in Session variable
    if(Request.Form["txtTextField"]!=null)
    {
        Session["txtTextField"]=Request.Form["txtTextField"];
    }
}

The problem is that the form data is lost on the automatic redirect which is applied by friendlyUrls - if you store that data as something other than form data, it is unnecessary to turn off friendlyUrls or set AutoRedirectMode to RedirectMode.Off.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文