【问题标题】:web app is changing URL automatically when POST/Submit is fired当 POST/Submit 被触发时,Web 应用程序会自动更改 URL
【发布时间】:2017-04-07 18:52:23
【问题描述】:

我在名为“Graphics”的文件夹中有一个 .aspx 页面。

在该页面(DisplayArena.aspx)中,我使用 jQuery.load 将另一个 .aspx 页面“加载”到这样的 div 中:

//in DisplayArena.aspx
//load from the "BossEncounters" folder
$(document).ready(function () {
    $("#mainGamingArena").load('../BossEncounters/encounterGenerator.aspx?ID=<%= Session("currentID") %>');
});

它可以很好地加载遭遇生成器,但是每当我需要在该页面上提交/发布任何内容时,它都会认为 URL 应该是“/Graphics/encounterGenerator.aspx”而不是“/BossEncounters/encounterGenerator.aspx”。

所以我最终得到一个 404 错误,错误页面显示:

请求的 URL:/Graphics/encounterGenerator.aspx

我不确定它在哪里或为什么会这样改变路径。它不在我的代码中的任何地方,它一定是某种幕后处理,我找不到它。

我的项目是 Visual Studio,设置如下:

Game_WebApp
   /Graphics
   /BossEncounters

有什么想法吗?

【问题讨论】:

  • 使用 IFrame 代替 div

标签: jquery asp.net .net visual-studio-2015 .net-4.5


【解决方案1】:

您不能将另一个 ASPX 页面动态加载到 ASPX 页面。它以两个这样的表单标签结束 -

<form method="post" ..>
   <form method="post" ..>
   ...
   </form>
</form>

因此,您无法将页面发布回服务器。 ASP.NET Web 表单技术不允许在一个页面中有两个表单标签。您对此无能为力。

【讨论】:

  • 哦,我明白了。即使遇到生成器.aspx 页面中没有表单?我通过对 API 控制器的 javascript/jquery ajax 调用进行提交/发布。我在该页面上没有
    元素。
  • 虽然在初始页面加载时看不到表单标签,但在调用load 函数后,浏览器最终以两个表单标签结束。您可能想研究不同的技术,例如 ASP.NET MVC。
  • 哦,我明白了。所以我可以通过将 .aspx 更改为一个简单的 .html 页面来解决这个问题?
  • 是的,你可以加载简单的.html文件,只要它没有html、body和form标签。
【解决方案2】:

如果您需要页面的一部分,请尝试实现您自己的UserControl,这正是引入它们的原因。和aspx很像,事件周期相同,可以很容易的变成created from a web page

你的代码会是这样的:

<!-- DisplayArena.aspx -->
<%@ Page Language="C#" %>
<%@ Register TagPrefix="uc" TagName="Boss" 
    Src="~/Controls/EncounterGenerator.ascx" %>
<html>
<body>
<form runat="server">
    <uc:Boss id="boss1" 
        runat="server"
    />
</form>
</body>

Session 将可用,因此无需使用标记传递。您还可以通过属性为用户控件提供一些参数。我鼓励您阅读有关此的整个 MSDN 部分。

另一种方法是使用Server.Transfer 方法,但这实际上是一个接一个地调用两个网页,而不是一个在另一个内。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2021-08-06
    • 2016-04-17
    • 2016-08-27
    • 2021-04-13
    相关资源
    最近更新 更多