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

Microsoftパスhttp://msdn.microsoft.com/en-us/library/aa479313.aspxに従うことをお勧めします

于 2012-05-29T11:17:56.777 に答える
2

要するに、Classical ASP のセッション変数は ASP.Net では使用できません (使用する言語に関係なく)。ASP.Net ページにポストバックされるクエリ文字列またはフォームを介して、その値を ASP.Net ページで使用できるようにする必要があります。したがって、推奨される解決策は、クエリ文字列を介して値 (従来の ASP ページのセッション変数にあるようです) を ASP.Net ページに渡すことです。次に、ASP.Net ページでクエリ文字列の値を取得し、必要な操作を行います。

ポイントを逃していないことを願っています。しかし肝心なのは、Classical ASP と ASP.Net のセッション変数の間には相互作用がないということです。これらはまったく異なるフレームワークとエンジンを使用しているためです。

于 2012-05-26T09:18:42.033 に答える
1

まず、「ASPNETPage1.aspx」では、Formコレクション全体をSession変数にコピーしています。これは、 http Server.Transfer: //msdn.microsoft.com/en-us/library/caxa892w. aspx

次に、"FinalPage.aspx" では、状態全体を反復処理する代わりに、プロパティを通じて同じコレクションに直接Sessionアクセスできます: http://msdn.microsoft.com/en-us/library/system.web.ui. page.previouspage.aspxFormPage.PreviousPage

更新:うわー、悪い、私は本当にあなたが話していると思っていましたVisual Basic(質問のタイトル、記事のリンク、サンプルコードがすべて示唆しているように) ではなくVBScript- これはクライアント言語であるため、同等のJavaScript PageMethodまたはWebService(決してusedVBScriptであるため、それらがサポートされているかどうかはわかりません)サーバーSessionの状態にアクセスする

あなたのコードサンプルに対する私の修正はまだ残っています。

更新 2: PageMethod orはサーバー上のサーバー言語 (または)WebServiceによって実装され、or (両方のクライアント言語) はクライアントからアクセスするためにのみ使用されます。サーバー言語とクライアント言語を区別することを学ぶ必要があります...Visual BasicC#VBScriptJavaScript

では、最後に or を使用していますVisual BasicVBScript? また、他の人から有意義な助けが期待できる場合は、元のコードを投稿してください。

于 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#の男ではありません)

Sessionvariablesは、ページの更新間および他のページ間の値を記憶するためだけのものです。最初の.ASPXでフォームを直接読み取る場合、それらは必要ありません。

于 2012-05-21T07:37:17.887 に答える