我正在做一些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
。
我希望这是有道理的!我还不完全确定实现这一目标的最佳方法。
答案 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事件,因为我正在使用更新面板。