我正在尝试将vbscript会话变量传递给我的c#页面。 经过研究,我找到了这个页面:
Transfer Session Variables from Classic ASP to ASP.NET
我不知道如何改变我的
Int32 intresortID = Convert.ToInt32(Request.QueryString["TypeID"]);
以与上面链接中提供的代码相同的方式读取会话变量(粘贴在下面:)
<TITLE>ASPNETPage1.aspx</TITLE>
<%@ Page language="c#" %>
<script runat=server>
// We iterate through the Form collection and assign the names and values
// to ASP.NET session variables! We have another Session Variable, "DestPage"
// that tells us where to go after taking care of our business...
private void Page_Load(object sender, System.EventArgs e)
{
for(int i=0;i<Request.Form.Count;i++)
{
Session[Request.Form.GetKey(i)]=Request.Form[i].ToString();
}
Server.Transfer(Session["DestPage"].ToString(),true);
}
</script>
=============================================== ===============================
<TITLE>FinalPage.aspx</TITLE>
<%@ Page language="c#" %>
<script runat=server>
// This page is just a "proof of concept page"...
private void Page_Load(object sender, System.EventArgs e)
{
Response.Write("Shared Session Variable Names/Values between Classic ASP and ASP.NET:<BR>");
for (int i = 0; i < Session.Contents.Count; i++)
{
Response.Write("Assigned to \"" +Session.Keys[i].ToString()+"\"");
Response.Write(" Value: "+ Session[i].ToString() +"<BR>");
}
}
</script>
更新: 在C#页面上调用会话变量的代码:
private void FillGrid()
{
string connStr = ConfigurationManager.ConnectionStrings["bdsConnectionString"].ConnectionString;
using (SqlConnection Con = new SqlConnection(connStr))
{
Con.Open();
Int32 intresortID = Convert.ToInt32(Request.Form["TypeID"]);
Label4.Text = Convert.ToString(intresortID);
Label4.Visible = true;
DateTime startdate;
startdate = Convert.ToDateTime(TextBox1.Text);
Int32 ed = Convert.ToInt32(TextBox2.Text);
DateTime enddate;
enddate = startdate.AddDays(ed);
string str = "SELECT TOP (100) PERCENT tblAvail.dtm as Dtm, tblResortsRooms.strRoomType as strRoomType, tblResortsRooms.strDescription as strDescription, tblAvail.intQty as intQty, tblAvail.curPrice as curPrice, tblResortsRooms.intWSCode as intWSCode FROM tblAvail INNER JOIN tblResortsRooms ON tblAvail.intResortID = tblResortsRooms.intResortID AND tblAvail.strRoomType = tblResortsRooms.strRoomType WHERE (tblResortsRooms.curRecRate > 0) AND (tblAvail.intResortID = @intResortID) and (tblAvail.dtm between @startdate and @enddate) ORDER BY tblResortsRooms.strRoomType";
SqlDataAdapter sdr = new SqlDataAdapter(str, Con);
sdr.SelectCommand.Parameters.AddWithValue("@intResortID", intresortID);
sdr.SelectCommand.Parameters.AddWithValue("@startdate", startdate);
sdr.SelectCommand.Parameters.AddWithValue("@enddate", enddate);
DataTable dt = new DataTable();
sdr.Fill(dt);
if (dt.Rows.Count > 0)
{
GridView1.DataSource = dt;
GridView1.DataBind();
Button2.Visible = true;
}
}
}
有人可以告诉我怎么样?
答案 0 :(得分:2)
底线是,ASP.Net中无法使用Classical ASP中的会话变量(无论使用何种语言)。您需要通过查询字符串或表单将该值提供给ASP.Net页面,该表单将被发布回ASP.Net页面。因此,建议的解决方案是通过查询字符串将值(显然位于传统ASP页面中的会话变量中)传递给ASP.Net页面。然后在ASP.Net页面上检索查询字符串值并用它做任何你想做的事情。
我希望我没有错过这一点。但是底线是Classic ASP和ASP.Net中的会话变量之间没有交互,因为它们使用完全不同的框架和引擎。
答案 1 :(得分:2)
我建议您遵循Microsoft路径http://msdn.microsoft.com/en-us/library/aa479313.aspx
答案 2 :(得分:1)
首先,在“ASPNETPage1.aspx”中,您将整个Form
集合复制到Session
个变量 - 这是绝对不必要的,因为您已经使用Server.Transfer
保存它: http://msdn.microsoft.com/en-us/library/caxa892w.aspx
其次,在“FinalPage.aspx”中,您可以直接通过Session
属性访问相同的Form
集合,而不是遍历整个Page.PreviousPage
状态:{{3} }
更新:哇,我的不好,我真的以为你在谈论Visual Basic
(正如你的问题标题,文章链接和示例代码都建议的那样)而不是{{1这是一种客户端语言,因此您需要等效的VBScript
或JavaScript PageMethod
(从未使用过WebService
,所以不知道是否它支持这些事情)访问服务器
VBScript
状态
我对您的代码示例的更正仍然存在,偏离
更新2: Session
或PageMethod
由服务器语言(WebService
或Visual Basic
实施)在服务器上,C#
或VBScript
(两种客户端语言)仅用于从客户端访问它 - 您需要学习区分服务器和客户端语言...
所以,最后一次,您使用的是JavaScript
还是Visual Basic
?如果您希望其他人提供任何有意义的帮助,请发布原始代码。
答案 3 :(得分:0)
没有使用C#的经验,但基于我的经验ASP经验ID应
Int32 intresortID = Convert.ToInt32(Request.Form[i]);
或者如果您知道密钥的名称,在这种情况下为TypeID,则不需要For循环
Int32 intresortID = Convert.ToInt32(Request.Form("TypeID"));
如果这不起作用,请尝试拆分并记录
for(int i=0;i<Request.Form.Count;i++)
{
loggingRoutine(Request.Form.GetKey(i) + "=" + Request.Form[i].ToString());
}
(正如我所说,我不是C#家伙,只是为了让你有个主意)
Sessionvariables只是为了记住页面刷新之间和其他页面之间的值,如果你直接在第一个.ASPX中读取表单,则不需要它们。