2011-12-23 18 views
0

クエリ文字列を使用する必要がないように、以下のコードを変更したいと考えています。私は2つの変数yesIDnoIDを設定したいと思います。 default.aspxから同じページdefault.aspxにナビゲートしています。これは可能ですか?もしそうなら、どのように?クエリ文字列なしで同じページに変数を渡す

//get query string 
if (Request.QueryString["yesId"] != null && Request.QueryString["noId"] != null) 
{ 
    int yesPictureId = Convert.ToInt32(Request.QueryString["yesId"]); 
    int noPictureId = Convert.ToInt32(Request.QueryString["noId"]); 

    //Set rated image Items to Visible 
    RatedImage.Visible = true; 
    HyperLink1.Visible = true; 
    RatedPicRating.Visible = true; 

    //pass ratings to database 
    Ratings PassRatings = new Ratings(); 
    PassRatings.InsertRatings(yesPictureId, 1); 
    PassRatings.InsertRatings(noPictureId, 2); 

    //Get total yes and nos and Do Calculation 
    Ratings GetNoVotes = new Ratings(); 
    int DATotalYesVotes = GetNoVotes.GetTotalNOVotes(1, yesPictureId); 
    int DaTNoVotes = GetNoVotes.GetTotalNOVotes(2, yesPictureId); 
    int DaTotalVotes = DATotalYesVotes + DaTNoVotes; 
    double Percentage = ((double)DATotalYesVotes/(double)DaTotalVotes) * 100; 
    //Round percentage 
    Percentage = Math.Round(Percentage, MidpointRounding.AwayFromZero); 

    //Insert New percentage 
    Picture UpdatePictureTating = new Picture(); 
    UpdatePictureTating.UpdateRatings(yesPictureId, (int)Percentage); 

    //Create pictue object 
    Picture RatedPic = new Picture(); 
    DataTable DARatedPicture = RatedPic.GetRatedPicByQueryString(yesPictureId); 

    //Assign Location and Rating to variables 
    foreach (DataRow row in DARatedPicture.Rows) 
    { 
     // firstRatedPicId = row["PicID"].ToString(); 
     //secondNoPicId = firstYesPicId; 
     //holds member Id for profile link 
     int MemberID = (int)row["MemberID"]; 
     RatedPicnameLabel.Text = row["MemberName"].ToString() + "'s profile"; 
     HyperLink1.NavigateUrl = "Member.aspx?UserID=" + MemberID; 
     RatedPicRating.Text = "Banged Rating: " + row["PicRating"].ToString() + "%"; 
     RatedImage.ImageUrl = "Pictures/" + row["PicLoc"]; 
     RatedImage.PostBackUrl = "Member.aspx?UserID=" + MemberID; 
    } 

} 
else 
{ 
    //If we dont have any ratied pictures hide those elements 
    RatedImage.Visible = false; 
    HyperLink1.Visible = false; 
    RatedPicRating.Visible = false; 
} 

以下の変数を設定しています。私はしかし、クエリ文字列を使用したくない。

FirstPicLink.PostBackUrl = "default.aspx?yesId=" + firstYesPicId + "&noId=" + firstNoPicId; 
SecondPicLink.PostBackUrl = "default.aspx?yesId=" + secondYesPicId + "&noId=" + secondNoPicId; 

私はこのようなことを考えています。しかし、どうすればこれらの変数を保存できますか?ページがリロードされると失われません。

yesID = 1 
NoID = 2 
FirstPicLink.PostBackUrl = "default.aspx"; 
SecondPicLink.PostBackUrl = "default.aspx"; 

答えて

0

、(ボタンなど)ポストバックの原因となるコントロールが戻って自分自身にページを送信します。したがって、PostBackUrlプロパティを使用する必要はありません。変数の値を永続化に関して

A)あなたは隠しフィールドに保存することができます:コントロールをご確認ください。

<asp:HiddenField id="yesID" runat="server" value="1"/> 

B)あなたはセッション変数を使用することができます。..

Session["yesID"] = 1; 

C)のViewState

ViewState["yesID"] = 1; 

し、ページのロード中に再びそれらを読んで。

0

IMO VeiwStateは、あなたが同じページに戻ってデータを掲載しているとして、あなたのために最高の仕事、そしてあなたの特定のケースのためのセッションよりもはるかに効率的でなければならない

ViewState["yesID"] = 1; 
ViewState["noID"] = 2; 
関連する問題