-1

製品のリストを含むグリッドビューがあります。私がやろうとしているのは、ItemTemplate を使用して、Onclick イベントを使用して選択したアイテムの ProductID をセッションに渡すことです。これにより、別のページでそのセッションを検索して、ProductID が URL に表示されないようにすることができます。

    <asp:GridView ID="GVProducts" runat="server" 
        onselectedindexchanged="GVProducts_SelectedIndexChanged">
     <Columns>
                <asp:ImageField DataImageUrlField="FileName"  
                    DataImageUrlFormatString="Images/{0}" HeaderText="Image">
                    <ControlStyle Height="80px" Width="80px" />
            </asp:ImageField>
              <asp:TemplateField HeaderText="Title" SortExpression="ProductID" > 
<ItemTemplate> 
        <a onclick="javascript:function setSessionVariable(<%#Eval("ProductID")%>)"  href="ProductDetail.aspx"><%#Eval("Title")%></a> 
</ItemTemplate></asp:TemplateField> 

        </Columns>
              <FooterStyle BackColor="#99CCCC" ForeColor="#003399" />
              <HeaderStyle BackColor="#003399" Font-Bold="True" ForeColor="#CCCCFF" />
              <PagerStyle BackColor="#99CCCC" ForeColor="#003399" HorizontalAlign="Left" />
              <RowStyle BackColor="White" ForeColor="#003399" />
              <SelectedRowStyle BackColor="#009999" Font-Bold="True" ForeColor="#CCFF99" />
              <SortedAscendingCellStyle BackColor="#EDF6F6" />
              <SortedAscendingHeaderStyle BackColor="#0D4AC4" />
              <SortedDescendingCellStyle BackColor="#D6DFDF" />
              <SortedDescendingHeaderStyle BackColor="#002876" />
    </asp:GridView>

うまくいけば、JavaScriptを使い始めたばかりなので簡単なものですが、セッションに渡すことができないようです。

ありがとう

4

3 に答える 3

0

セッションの設定は ServerSide で行う必要があります。これを試して

マークアップ

<asp:TemplateField HeaderText="Title" SortExpression="ProductID" > 
    <ItemTemplate> 
        <asp:LinkButton ID="MyLink" runat="server" 
                  CommandName="SendID" 
                  CommandArgument='<%#Eval("ProductID")%>'>
            <%#Eval("Title")%>
        </asp:LinkButton>
    </ItemTemplate>
</asp:TemplateField>

コードビハインド

   protected void GVProducts_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        // If multiple buttons are used in a GridView control, use the 
        // CommandName property to determine which button was clicked. 
        if (e.CommandName == "SendID")
        {
            // Get the ProductID stored in the CommandArgument 
            // property to an String. 
            string clickedProductID = e.CommandArgument.ToString();

            // Set that ProductID to Session        
            Session["ProductID"] = clickedProductID;

            // Redirect to the newpage. 
            Response.Redirect("ProductDetails.aspx");
        }
}

OnRowCommand="GVProducts_RowCommand"GridView マークアップに 忘れずに追加してください。


アップデート:

  <asp:GridView ID="GVProducts" runat="server" 
    OnRowCommand="GVProducts_RowCommand">
于 2012-04-22T22:55:27.480 に答える
0

JavaScript から (jQuery を使用して) Web メソッドを呼び出し、Web メソッドでセッションを設定します。

public partial class _Default : Page 
{
  [WebMethod]
  public static void SetVar(string myVar)
  {
    Session["var"] = myVar;
  }
}

jQuery:

$.ajax({
  type: "POST",
  url: "Default.aspx/SetVar",
  data: "{'myVar':'SessionVarValueSetOnJavascript'}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
    // Do something interesting here.
  }
});

素敵な例については、このページを参照してください

于 2012-04-22T15:21:18.807 に答える
0

プロジェクトに jQuery ライブラリがある場合は、jQuery ajax を使用してサーバー ページにデータを送信できます。

function setSessionVariable(selectedval)
{
 $.post("yourserverpage.aspx", { productId : selectedval },function(data){
    alert("set to session!");
 });    
}

youserverpage.aspx という名前の aspx ページを作成し、ページの読み込みでクエリ文字列の値を読み取り、セッションに設定します。

于 2012-04-22T15:24:38.617 に答える