ASP.Net c# - URL 参数异常行为
ASP.Net c# - URL Parameter weird behaviour
我正在做一些 URL 更改,以便在用户单击某些组件时在末尾添加一些 id 值。
因此,例如,当我登录到我的 AdminCP 时,我有一个用户帐户列表,可以对它们执行各种操作,例如修改信息或删除用户帐户。
我使用的 ASP.NET 页面是根据母版页设计的。该母版页也是全局母版页的一部分。所以,就像一个嵌套的母版页。
单击用户帐户时,我将用户名记录在会话变量中,然后在页面加载时使用 button postback url
调用它。例如;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["QueryString"] != null)
{
AdminHiddenButtonDelete.PostBackUrl = Request.Url.AbsolutePath + Session["QueryString"].ToString();
}
}
我在触发按钮事件时设置 Session["QueryString"]
。
private void DeleteUser(string user)
{
admin_user_accounts_wrapper.Style.Add("display", "none");
admin_user_accounts_user_delete.Style.Add("display", "block");
Session["ClickedUserAccount"] = user; // This session is used to hold the username of the clicked useraccount
Session["QueryString"] = "?User = " + user + " ";
admin_user_account_user_delete_heading.InnerText = "Are you sure you wish to delete the user account " + user + "?";
}
当用户点击网站上的 html <button />
时调用。
其中查询字符串包含用户帐户名称。例如,输出的 URL 应该是 url.aspx?User=John
。除了,它似乎总是落后一个回发。因此,如果我导航到 John
用户,然后导航到 Rick
用户,Rick
URL
将显示 John
,当我返回John
用户 URL
将显示 Rick
.
我希望这是有道理的!我只是不确定完成此操作的最佳方法。
对于可能做过与我类似的事情的任何人,我想 post 我关于如何解决此问题的回答,希望它可以帮助那里的其他人。
我做的第一件事是回到一些关于动态内容的基础知识,并意识到我应该使用 AJAX Update Panel
来减少 postbacks 的数量那正在发生。
我接下来要做的是逐行检查所有代码。我以编程方式制作了一个内容容器,其中包含 div
id 和一些 HTML 按钮。单击这些 HTML 按钮会触发 JavaScript 功能。然后这个函数调用了两个隐藏的 <asp
按钮。这就是我的错误开始的地方。
JavaScript 函数调用了点击事件;
var hiddenButton = $('#<%= AdminHiddenButtonDelete.ClientID %>');
if (hiddenButton != null) {
hiddenButton.click();
这是我的第一个错误。我现在有两个按钮,一个按钮执行两次 click
服务器命令,两个 post 返回。
因此,在删除两个隐藏按钮和所有 javascript 之后,我需要更改对内容进行编码的方式。
我换成使用 WebControls.Button
并将 contentResolver 放在 aspx.cs 而不是它自己的 class 中,然后单击使用 new EventHandler(this.UserDelete_Click);
这将 eventClick 绑定到我自己的函数,允许我注册 onClick 事件而无需 post打包,因为我正在使用更新面板。
我正在做一些 URL 更改,以便在用户单击某些组件时在末尾添加一些 id 值。
因此,例如,当我登录到我的 AdminCP 时,我有一个用户帐户列表,可以对它们执行各种操作,例如修改信息或删除用户帐户。
我使用的 ASP.NET 页面是根据母版页设计的。该母版页也是全局母版页的一部分。所以,就像一个嵌套的母版页。
单击用户帐户时,我将用户名记录在会话变量中,然后在页面加载时使用 button postback url
调用它。例如;
protected void Page_Load(object sender, EventArgs e)
{
if (Session["QueryString"] != null)
{
AdminHiddenButtonDelete.PostBackUrl = Request.Url.AbsolutePath + Session["QueryString"].ToString();
}
}
我在触发按钮事件时设置 Session["QueryString"]
。
private void DeleteUser(string user)
{
admin_user_accounts_wrapper.Style.Add("display", "none");
admin_user_accounts_user_delete.Style.Add("display", "block");
Session["ClickedUserAccount"] = user; // This session is used to hold the username of the clicked useraccount
Session["QueryString"] = "?User = " + user + " ";
admin_user_account_user_delete_heading.InnerText = "Are you sure you wish to delete the user account " + user + "?";
}
当用户点击网站上的 html <button />
时调用。
其中查询字符串包含用户帐户名称。例如,输出的 URL 应该是 url.aspx?User=John
。除了,它似乎总是落后一个回发。因此,如果我导航到 John
用户,然后导航到 Rick
用户,Rick
URL
将显示 John
,当我返回John
用户 URL
将显示 Rick
.
我希望这是有道理的!我只是不确定完成此操作的最佳方法。
对于可能做过与我类似的事情的任何人,我想 post 我关于如何解决此问题的回答,希望它可以帮助那里的其他人。
我做的第一件事是回到一些关于动态内容的基础知识,并意识到我应该使用 AJAX Update Panel
来减少 postbacks 的数量那正在发生。
我接下来要做的是逐行检查所有代码。我以编程方式制作了一个内容容器,其中包含 div
id 和一些 HTML 按钮。单击这些 HTML 按钮会触发 JavaScript 功能。然后这个函数调用了两个隐藏的 <asp
按钮。这就是我的错误开始的地方。
JavaScript 函数调用了点击事件;
var hiddenButton = $('#<%= AdminHiddenButtonDelete.ClientID %>');
if (hiddenButton != null) {
hiddenButton.click();
这是我的第一个错误。我现在有两个按钮,一个按钮执行两次 click
服务器命令,两个 post 返回。
因此,在删除两个隐藏按钮和所有 javascript 之后,我需要更改对内容进行编码的方式。
我换成使用 WebControls.Button
并将 contentResolver 放在 aspx.cs 而不是它自己的 class 中,然后单击使用 new EventHandler(this.UserDelete_Click);
这将 eventClick 绑定到我自己的函数,允许我注册 onClick 事件而无需 post打包,因为我正在使用更新面板。