1

我正在尝试获取一个 asp.net 图表,它的图例允许我在另一个选项卡中打开另一个页面,传递我点击的图表的值。通过执行以下操作,我可以在单击图表时打开另一个选项卡,但它不会传递数据。

Chart2.Series[0].LegendUrl = "chartdetails.aspx";
Chart2.Series[0].Url = "chartdetails.aspx";
Chart2.Series[0].LegendMapAreaAttributes="target=\"_blank\"";
Chart2.Series[0].LegendPostBackValue = "#VALY-#VALX";
Chart2.Series[0].MapAreaAttributes="target=\"_blank\"";
Chart2.Series[0].PostBackValue = "#VALY-#VALX";

如果我省略了 url 和 mapareaattributes,我可以让它转到我能够获取数据的 onclick,将它放在会话变量中并使用 Reponse.Redirect 打开它看到会话变量数据的新页面,但是它不会在另一个选项卡中打开,而是在同一个选项卡中打开。

Chart2.Series[0].LegendPostBackValue = "#VALY-#VALX";
Chart2.Series[0].PostBackValue = "#VALY-#VALX";

protected void Chart2_Click(object sender, ImageMapEventArgs e)
{
    HttpContext.Current.Session["VAL"] = e.PostBackValue;
    Response.Redirect("chartdetails.aspx", false);
}

我怎样才能让它两者兼得?Response.Redirect 有办法打开一个新标签吗?一些研究让我相信事实并非如此。有没有办法让服务器端 onclick 事件都运行,所以我可以设置会话变量和 chart.series.url 在服务器端点击运行后触发,以便在我打开新选项卡之前设置会话变量?

我觉得这可能是“我不能吃蛋糕也不能吃”的情况。

4

2 回答 2

1

事实证明,我也可以吃蛋糕。如果我在我的 Page_Load 中设置 url、postbackvalues 和 legendmapareaattributes 并设置图表的单击以在单击图表时将 PostBackValue 放入会话变量中,它会将值保存在 PostBackValue 中列出的会话变量中图表的系列。然后它会在新选项卡 chartdetails.aspx 中打开,我可以在其中访问会话变量中的信息。

Chart2.Series[0].LegendUrl = "chartdetails.aspx";
Chart2.Series[0].LabelUrl = "chartdetails.aspx";
Chart2.Series[0].Url = "chartdetails.aspx";

Chart2.Series[0].LegendPostBackValue = "#VALY-#VALX";
Chart2.Series[0].LabelPostBackValue = "#VALY-#VALX";
Chart2.Series[0].PostBackValue = "#VALY-#VALX";

Chart2.Series[0].LegendMapAreaAttributes = "target=\"_blank\"";
Chart2.Series[0].LabelMapAreaAttributes = "target=\"_blank\"";
Chart2.Series[0].MapAreaAttributes="target=\"_blank\"";

protected void Chart2_Click(object sender, ImageMapEventArgs e)
{
    HttpContext.Current.Session["VAL"] = e.PostBackValue;                  
}
于 2013-12-19T19:04:59.890 回答
0

由于某种原因,我无法使用回发来获取该系列的价值。所以,我想分享我受@Adam 启发的方式,即在数据绑定图表和设置 URL 之后循环序列点。

得到:

Series s=new Series("Test");
/*
*  After Data bind to the series s 
*/
for (int p = 0; p < s.Points.Count; p++)
{
  s.Points[p].Url ="test.aspx?name1=value1&name2=value2";
  s.Points[p].MapAreaAttributes = "target=\"_blank\"";
}

邮政:

(我将 javascript 函数放在 url 中。因此,它将执行 javascript 以将我在函数中创建的表单发送到 text.aspx。)

Series s=new Series("Test");
/*
*  After Data bind to the series s 
*/
for (int p = 0; p < s.Points.Count; p++)
{
    s.Points[p].Url ="javascript:(function(){" +
                                "var mapForm = document.createElement('form');mapForm.target = '_blank';" +
                                "mapForm.method = 'POST';mapForm.action = 'test.aspx';" +
                                "var mapInput = document.createElement('input');mapInput.type = 'hidden';" +
                                "mapInput.name = 'partID';mapInput.value = 'put any value you need';" +
                                "mapForm.appendChild(mapInput);document.body.appendChild(mapForm);" +
                                "mapForm.submit();document.body.removeChild(mapForm);})();";
}

参考:

Javascript 使用 POST 传递值

于 2019-10-25T07:27:15.817 回答