0

我正在尝试将一个 vbscript 会话变量传递给我的 c# 页面。经过研究,我发现了这个页面:

将会话变量从经典 ASP 传输到 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;
                }




            }

        }

有人可以告诉我怎么做吗?

4

4 回答 4

2

底线是经典 ASP 中的会话变量对 ASP.Net 不可用(无论使用何种语言)。您将需要通过一个查询字符串或表单将这个值提供给 ASP.Net 页面,该查询字符串或表单会被发回 ASP.Net 页面。因此,建议的解决方案是通过查询字符串将值(显然位于经典 ASP 页面中的会话变量中)传递给 ASP.Net 页面。然后在 ASP.Net 页面上检索查询字符串值并使用它做任何你想做的事情。

我希望我没有错过重点。但底线是经典 ASP 和 ASP.Net 中的会话变量之间没有交互,因为它们使用完全不同的框架和引擎。

于 2012-05-26T09:18:42.033 回答
2

我建议遵循 Microsoft 路径http://msdn.microsoft.com/en-us/library/aa479313.aspx

于 2012-05-29T11:17:56.777 回答
1

首先,在“ASPNETPage1.aspx”中,您将整个Form集合复制到Session变量中 - 这是绝对没有必要的,因为您已经通过http://msdn.microsoft.com/en-us/library/caxa892wServer.Transfer保存了它。aspx

其次,在“FinalPage.aspx”中,您可以直接通过属性Session访问同一集合,而不是遍历整个状态:http: //msdn.microsoft.com/en-us/library/system.web.ui。 page.previouspage.aspxFormPage.PreviousPage

更新:哇,我的错,我真的以为你在谈论Visual Basic(正如你的问题标题、文章链接和示例代码都会建议的那样)而不是VBScript- 这是一种客户端语言,所以你需要一个等价于JavaScript PageMethod或一个WebService(从不used VBScript,所以不知道它是否支持那些东西)访问服务器Session上的状态

我对您的代码示例的更正仍然有效,当然

更新2: PageMethod or aWebService由服务器上的服务器语言(Visual Basicor C#)实现, and VBScriptor JavaScript(两种客户端语言)仅用于从客户端访问它-您需要学习区分服务器语言和客户端语言...

那么,最后一次,您使用的是Visual BasicorVBScript吗?如果您希望其他人提供任何有意义的帮助,请发布您的原始代码。

于 2012-05-24T12:38:34.893 回答
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# 人,只是为了让你有个想法)

会话变量仅用于记住页面刷新之间和其他页面之间的值,如果您直接在第一个 .ASPX 中读取表单,则不需要它们。

于 2012-05-21T07:37:17.887 回答