使用javascript将gridview列值传递给会话

时间:2012-04-22 14:30:27

标签: javascript asp.net session gridview

我有一个包含产品列表的gridview。我想要做的是使用ItemTemplate使用Onclick事件将所选项目的ProductID传递给会话,这样我就可以在另一个页面上查找该会话,以避免在URL中显示ProductID。

    <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,但我似乎无法将其传递给会话。

由于

3 个答案:

答案 0 :(得分:0)

从您的javascript调用web方法(使用jQuery)并在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.
  }
});

See this page for a nice example

答案 1 :(得分:0)

如果你的项目中有jQuery库,你可以使用jQuery ajax将数据发送到服务器页面。

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

并创建一个名为youserverpage.aspx的aspx页面,并在页面加载中读取查询字符串值并设置为session。

答案 2 :(得分: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">