从ASP.NET为网页创建新选项卡或窗口
我有一个主页,我想成为我的web应用程序中用户的调度中心。因此,我希望主页保持打开状态,但当用户选择某些任务时,我可以对其进行设置,以便使用他们选择的任务创建新的选项卡或页面 我知道如何将控制权转移到另一个页面,但如何做服务器之类的事情。转移仅使新页面显示在新选项卡中,并使现有页面在旧选项卡/窗口中保持打开状态 举一个我正在做的例子。我目前在我的主页上有一个转发器,它构造了一个链接按钮列表。链接按钮包含来自数据源的文本。一旦用户点击一个链接按钮,我想打开一个新页面,我希望会话状态与这个新页面一起保留 这能做到吗?如何做到 我正在使用.NET3.5中的ASP.NET版本从ASP.NET为网页创建新选项卡或窗口,asp.net,repeater,Asp.net,Repeater,我有一个主页,我想成为我的web应用程序中用户的调度中心。因此,我希望主页保持打开状态,但当用户选择某些任务时,我可以对其进行设置,以便使用他们选择的任务创建新的选项卡或页面 我知道如何将控制权转移到另一个页面,但如何做服务器之类的事情。转移仅使新页面显示在新选项卡中,并使现有页面在旧选项卡/窗口中保持打开状态 举一个我正在做的例子。我目前在我的主页上有一个转发器,它构造了一个链接按钮列表。链接按钮包含来自数据源的文本。一旦用户点击一个链接按钮,我想打开一个新页面,我希望会话状态与这个新页面一起
编辑:我不在乎它是标签还是窗口。我只是希望能够生成一个新的网页,并保持现有的一个打开。我几乎肯定这是不可能的。大多数选项卡式浏览器都有一个可以调整的设置,告诉浏览器应该在哪里启动新页面——在一个全新的窗口中或在一个新的选项卡中
考虑到这是由用户控制的事实,我认为目前没有一种方法能够以独立于浏览器的方式实现这一点。虽然如果IE的DOM扩展公开的对象模型允许您这样做,我不会感到惊讶。我几乎肯定这是不可能的。大多数选项卡式浏览器都有一个可以调整的设置,告诉浏览器应该在哪里启动新页面——在一个全新的窗口中或在一个新的选项卡中
考虑到这是由用户控制的事实,我认为目前没有一种方法能够以独立于浏览器的方式实现这一点。尽管如果IE的DOM扩展所公开的对象模型允许您这样做,我不会感到惊讶。这是不可能的,无论是在选项卡中打开的新页面,还是由浏览器中的用户设置而不是代码控制的新页面。这是不可能的,无论是在选项卡中打开的新页面,或者,新页面由浏览器中的用户设置控制,而不是由代码控制。您不能在服务器端更改UI行为(例如,使用server.Transfer或Response.Redirect)-它就是不起作用。因此,有两种方法可以做到这一点:
如果您使用的是基于url(或无cookieless)的会话密钥,则在使用javascript打开新窗口时,需要确保使用该密钥正确格式化url。我不是很肯定,但我相信使用target属性和相对url应该会自动生成相应的url。您不能在服务器端更改UI行为(例如,通过使用server.Transfer或Response.Redirect)-它就是不起作用。因此,有两种方法可以做到这一点:
protected void RecentButtonsRepeater_ItemCommand(object source,
RepeaterCommandEventArgs e)
{
string code = ((LinkButton)e.Item.Controls[1]).Text;
string sql = "SELECT RunID FROM ProductionRuns WHERE RunCode = @code";
SqlConnection sqlconn = new SqlConnection(QCDataPath);
sqlconn.Open();
SqlCommand sqlcomm = new SqlCommand(sql, sqlconn);
sqlcomm.Parameters.AddWithValue("@code", code);
SqlDataReader sdr = sqlcomm.ExecuteReader();
sdr.Read();
int id = sdr.GetInt32(0);
sdr.Close();
sqlconn.Close();
Session["RunID"] = id;
Server.Transfer("Sheet.aspx");
}
在Sheet.aspx标记中:
<script type="text/javascript">
function ReOpenScoreHome() {
window.open("Scoresheets.aspx", "reopenwindow");
}
</script>
</head>
<body onload="ReOpenScoreHome()">
函数home(){
打开(“Scoresheets.aspx”,“重新打开窗口”);
}
我就是这么做的
我需要根据他们所做的选择添加一个会话状态变量,在Firefox中,它会生成一个新的选项卡,这很好:
在dispatch页面中,我只使用Server.Transfer转到新页面(添加会话状态后),但是在新页面上,我运行了一个onload脚本。这是我的密码:
在dispatch页面的Item Command事件处理程序中:
protected void RecentButtonsRepeater_ItemCommand(object source,
RepeaterCommandEventArgs e)
{
string code = ((LinkButton)e.Item.Controls[1]).Text;
string sql = "SELECT RunID FROM ProductionRuns WHERE RunCode = @code";
SqlConnection sqlconn = new SqlConnection(QCDataPath);
sqlconn.Open();
SqlCommand sqlcomm = new SqlCommand(sql, sqlconn);
sqlcomm.Parameters.AddWithValue("@code", code);
SqlDataReader sdr = sqlcomm.ExecuteReader();
sdr.Read();
int id = sdr.GetInt32(0);
sdr.Close();
sqlconn.Close();
Session["RunID"] = id;
Server.Transfer("Sheet.aspx");
}
在Sheet.aspx标记中:
<script type="text/javascript">
function ReOpenScoreHome() {
window.open("Scoresheets.aspx", "reopenwindow");
}
</script>
</head>
<body onload="ReOpenScoreHome()">
傅