ASP.Net c# - URL参数奇怪的行为

时间:2015-04-21 12:57:23

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

我正在做一些URL更改,以便在用户点击某些组件时将一些id值添加到最后。

例如,当我登录我的AdminCP时,我有一个用户帐户列表,可以对其进行各种操作,例如修改信息或删除用户帐户。

我正在使用的ASP.NET页面是在Master Page下设计的。 Master Page也是Global Master页面的一部分。所以,就像一个嵌套的母版页。

单击用户帐户时,我会在会话变量中记录用户名,然后在页面加载时使用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

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

1 个答案:

答案 0 :(得分:0)

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

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

我接下来要做的就是逐行浏览所有代码。我以编程方式创建了一个容纳div id的内容容器以及一些HTML按钮。单击这些HTML按钮时会触发JavaScript函数。然后,此函数调用两个隐藏的<asp按钮。这就是我的错误开始的地方。

JavaScript函数称为click事件;

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

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

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

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

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