【问题标题】:ASP.Net c# - URL Parameter weird behaviourASP.Net c# - URL 参数奇怪的行为
【发布时间】:2015-06-28 15:41:15
【问题描述】:

当用户点击某些组件时,我正在做一些 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

我希望这是有道理的!我只是不完全确定实现这一目标的最佳方法。

【问题讨论】:

  • 你在哪里设置Session["QueryString"]?您可以更新以包含该代码吗?
  • 当然。给我一秒钟
  • 听起来可能会发生以下情况: 1. 用户点击删除按钮删除约翰。 2. 调用页面加载事件,这会更新会话变量为 John。 3. 约翰被删除。 4. 删除按钮的链接将更新为 John,但该用户已被删除。因此,您将获得一位用户。
  • 是的,我上面的步骤可能并不完全准确,但似乎代码正在删除一个用户,然后会话变量会随着被删除的用户而不是下一个用户更新。您应该端到端地单步执行您的代码,以准确跟踪正在发生的事情以及以什么顺序发生。
  • 我已经停止使用会话来看看会发生什么。似乎是导致此问题的两次页面刷新。我想我知道我需要做些什么来修复它。

标签: asp.net c#-4.0 url-rewriting


【解决方案1】:

对于任何可能做过与我类似的事情的人,我想发布我如何解决此问题的答案,希望它可以帮助其他人。

我做的第一件事是回到一些关于动态内容的基础知识,并意识到我应该使用 AJAX Update Panel 来减少正在发生的回发数量。

接下来我做的是逐行检查我的所有代码。我以编程方式制作了一个内容容器,其中包含div id 和一些 HTML 按钮。单击这些 HTML 按钮会触发 JavaScript 函数。然后这个函数调用了两个隐藏的<asp 按钮。这就是我的错误开始的地方。

调用点击事件的 JavaScript 函数;

 var hiddenButton = $('#<%= AdminHiddenButtonDelete.ClientID %>');
            if (hiddenButton != null) {
                hiddenButton.click(); 

这是我的第一个错误。我现在有两个按钮,一个按钮执行两次click 服务器命令,两个回发。

因此,在删除了两个隐藏按钮和所有 javascript 之后,我需要更改我对内容进行编码的方式。

我改用 WebControls.Button 并将 contentResolver 放在 aspx.cs 而不是它自己的类中,然后点击使用 new EventHandler(this.UserDelete_Click);

这将 eventClick 绑定到我自己的函数,允许我注册 onClick 事件而无需 postpacking,因为我正在使用更新面板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多