.NET中如何将Session值用于DetailsView的SqlDataSource SelectCommand
解决方案
首先要明确:你前端用的sessionStorage是浏览器端存储,ASP.NET的Session是服务器端会话存储,两者不直接互通。得先把前端sessionStorage的值传递到服务器端Session中,再让SqlDataSource读取这个服务器Session值作为查询参数。
步骤1:将前端sessionStorage值传递到服务器Session
可以通过隐藏域+页面回传,或者AJAX的方式把值传给服务器:
方法1:隐藏域配合页面回传
在页面添加服务器端隐藏控件:
<asp:HiddenField ID="hdnSaltasis" runat="server" />
修改jQuery代码,把sessionStorage的值赋值给隐藏域并触发回传:
<script> $(function() { var baseUrl = window.location.href; var clubid = baseUrl.substring(baseUrl.lastIndexOf('=') + 1); sessionStorage.setItem("se", "13801"); var ses = sessionStorage.getItem("se"); // 赋值给服务器隐藏域 $('#<%= hdnSaltasis.ClientID %>').val(ses); // 触发页面回传,让服务器读取值存入Session __doPostBack('hdnSaltasis', ''); }); </script>
后台Page_Load事件中把隐藏域值存入Session:
protected void Page_Load(object sender, EventArgs e) { if (!string.IsNullOrEmpty(hdnSaltasis.Value)) { Session["saltasis"] = hdnSaltasis.Value; // 触发DetailsView数据绑定 DetailsView1.DataBind(); } }
方法2:AJAX无刷新传递
用AJAX把值传给后端WebMethod:
<script> $(function() { var ses = sessionStorage.getItem("se"); $.ajax({ type: "POST", url: "YourPage.aspx/SetSessionValue", contentType: "application/json; charset=utf-8", data: JSON.stringify({ value: ses }), success: function() { // 刷新DetailsView数据 $('#<%= DetailsView1.ClientID %>').load(window.location.href + ' #<%= DetailsView1.ClientID %>'); } }); }); </script>
后台添加WebMethod:
[WebMethod(EnableSession = true)] public static void SetSessionValue(string value) { HttpContext.Current.Session["saltasis"] = value; }
步骤2:配置SqlDataSource的SessionParameter
修改SqlDataSource参数配置,保证参数名和Session键名匹配:
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:sina1ConnectionString %>" SelectCommand="SELECT * FROM [club] WHERE saltasis = @saltasis"> <SelectParameters> <!-- Name对应SelectCommand里的@saltasis,SessionField对应服务器Session的键名 --> <asp:SessionParameter Name="saltasis" SessionField="saltasis" Type="string" /> </SelectParameters> </asp:SqlDataSource>
步骤3:确认DetailsView绑定
确保DetailsView的DataSourceID指向SqlDataSource1:
<asp:DetailsView ID="DetailsView1" runat="server" DataSourceID="SqlDataSource1"> <!-- 你的Fields配置 --> </asp:DetailsView>
注意事项
- 服务器端
Session默认启用,若项目禁用需先开启。 - 若页面加载时就要绑定数据,需确保Session值设置完成后再调用
DataBind()。 - 若
sessionStorage的值是动态获取的(比如代码里的clubid),替换固定值"13801"为实际动态值即可。
内容的提问来源于stack exchange,提问作者simo
相关产品推荐
相关产品推荐

