在ASP.NET开发过程中,我们经常会遇到从Request.QueryString中取不到值的情况,这可能是由于多种原因造成的,比如查询字符串的格式不正确、浏览器或服务器设置的问题等,本文将详细介绍在ASP.NET下解决Request.QueryString取不到值的方法。
问题分析
在ASP.NET中,Request对象包含了客户端请求的所有信息,QueryString属性用于获取URL中的查询字符串,以下是一些可能导致Request.QueryString取不到值的原因:
解决方法
检查查询字符串格式
确保查询字符串的格式正确,查询字符串应该由参数名和参数值组成,两者之间用等号连接,多个参数之间用问号分隔,以下是一个正确的查询字符串示例:
检查浏览器和服务器设置

使用编码和解码方法
如果查询字符串包含特殊字符,可能需要进行编码和解码操作,以下是一个使用ASP.NET进行编码和解码的示例:
string encodedQuery = HttpUtility.UrlEncode("你好,世界!");string decodedQuery = HttpUtility.UrlDecode(encodedQuery);
使用Response.Write方法验证
在页面中添加Response.Write方法输出查询字符串,以验证查询字符串是否正确传递:
Response.Write(Request.QueryString["param1"]);
如果输出为空,则说明查询字符串可能存在问题。
使用Trace模式
启用ASP.NET的Trace模式,可以帮助你调试和查看请求的详细信息:
示例代码
以下是一个简单的ASP.NET页面示例,用于展示如何从Request.QueryString中获取值:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>Request.QueryString示例
using system;using System.Web;public partial class Default : System.Web.UI.Page{protected void Page_Load(object sender, EventArgs e){if (!IsPostBack){TextBox1.Text = Request.QueryString["param"];}}protected void Button1_Click(object sender, EventArgs e){TextBox1.Text = Request.QueryString["param"];}}
Q1:为什么我的查询字符串总是取不到值?
这可能是由于查询字符串格式错误、浏览器或服务器设置问题、编码问题等原因造成的,请检查查询字符串格式、浏览器和服务器设置,并确保查询字符串正确编码。
Q2:如何确保查询字符串在URL中正确传递?
确保查询字符串格式正确,由参数名和参数值组成,两者之间用等号连接,多个参数之间用问号分隔。确保服务器和浏览器支持查询字符串传递。
asp.net和JQuery EasyUI DataGrid的数据交互问题
JQuery 与后台交付有get和post两种方法,我这里给你简介绍一下吧:
get方法:$(?userName=123,function(data){
//后台地址 userName参数 123参数值
//data是从后台返回来的数据
post方法:
$(,{userName:你好},function(data){
// //后台地址 userName参数 123参数值
//data是从后台返回来的数据
using System;using ;using SQLLibary;using ;using ;
public class index : IHttpHandler {
public void ProcessRequest (HttpContext context) {
= text/plain;
string type = [userName];
}public bool IsReusable {get {return false;}}
有什么不懂可以追问!有空就帮你解答!
请问JDBC如何连接java和mysql?
publicstatic Connection getconnection(){try {();} catch (ClassNotfoundException e) {// TODO Auto-generated catch ();}Connection conn=null;try {conn=(jdbc:mysql://127.0.0.1/user?useEncode=true&characterEncoding=utf-8,root,root);} catch (SQLException e) {// TODO Auto-generated catch ();}return conn;}
ASP.NET 跨域共享Session的解决思路
1.首先简要说说 的session机制,当客户端向服务端发生会话时(不是访问了网站某页面就一定产生了会话),服务端会写一个cookie到客户端,这个cookie保存着sessionid ,名字为“_SessionID” ,在下一次发生向服务端的请求时这个cookie会包含在请求头中,这个cookie仅仅包含了sessionid ,其他信息以(某种形式)保存在服务端并被sessionid标识。2.因为我们要实现两个域的session共享,我们采用的方式是session的值保存在SqlServer数据库中(至于为什么要保存在SqlServer数据库中,这里不做探讨),如何用数据库保存session的资料可以很轻易的在博客园中找到,子秋的博客中有记表ASPStateTempApplications有两个字段 ,一个appid ,一个appname ,一个应用程序相当于一个网站,这个表中的数据会在网站第一次被访问并产生session时添加,一个网站会产生一条记录,ASPStateTempSessions 表才是真正保存会话信息的表,有个二进制数据类型的字段用来保存session数据,还有创建时间过期时间的字段,当然少不了主键标识字段,也就是sessionid, 注意了!这个sessionid 的保存会在真正的sessionid上加个后缀 ,后缀是相应的ASPStateTempSessions表中应用程序id的十六进制表示形式,这样的话,如果两个应用程序不小心产生了同样的sessionid 也不会出现问题,因为还有后缀标识。4.问题出来了,如果让两个域(既是两个应用程序,两个网站)产生同样的sessionid 并且让应用程序名一样,不就可以共享session了吗?这样一来又有问题了?a.会话sessionid是保存在名字为“_SessionId”的cookie中的,我们知道cookie是不能跨域的,但是我们有方法让他能够夸二级多级域名,注意:主域名还是不能跨的方法就是该cookie的主机名,具体代码如:HttpCookieco=[_SessionId];=;(co);这一步只让sessionid 一样了呀,还差一步,就是让应用程序名一样b.如何让应用程序名一样呢 ,我们分析ASPStateTempApplications这张表中的记录是如何的来的,上面也有简单提到,具体分析后,发现记录是通过存储过程TempGetAppID插入的,我们将其改为:代码setANSI_NULLSONsetQUOTED_IDENTIFIERONgoALTERPROCEDURE[dbo].[TempGetAppID]@appNametAppName,@appIdintOUTPUTASSET@appName=fejerry--LOWER(@appName)SET@appId=NULLSELECT@appId=AppIdFROM[ASPState]=@appNameIF@appIdISNULLBEGINBEGINTRANSELECT@appId=AppIdFROM[ASPState](TABLOCKX)WHEREAppName=@appNameIF@appIdISNULLBEGINEXECGetHashCode@appName,@appIdOUTPUTinsert[ASPState](@appId,@appName)IF@@ERROR=2627BEGINDECLARE@dupApptAppNameSELECT@dupApp=RTRIM(AppName)FROM[ASPState]=@appIdRAISERROR(SQLsessionstatefatalerror:hash-codecollisionbetweenapplications%sand%1stapplicationtoresolvetheproblem.,18,1,@appName,@dupApp)ENDENDCOMMITENDRETURN0给一个固定的应用程序名,不管什么网站,只要以当前SqlServer作为session存储机制,都会记录为同一个应用程序,换句话说,就是表ASPStateTempApplications将只会有一条记录。5。 我这人喜欢钻牛角尖,这条记录是什么时候插入到数据库的呢?于是我手动删除了这条记录,但是即使删除了,仍然不影响应用程序的使用,不影响session的共享,于是我又把应用程序(网站)重启了, 对网站产生第一个会话后,我又去观察表ASPStateTempApplications,奇怪了,仍然一条记录都没有。
于是很自然的我把iis给重启了, 再对网站产生第一个会话后,又去观察表ASPStateTempApplications,出现了,出现了,终于出现了一条新的记录。 总结:表ASPStateTempApplications中的记录是在应用程序产生第一个会话时执行存储过程TempGetAppID产生的,(并且大胆猜测这条记录的信息也保存在iis中,依据是删掉表中记录也无影响)。














发表评论