我有一个包含产品列表的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,但我似乎无法将其传递给会话。
由于
答案 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.
}
});
答案 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">