首页新闻找找看学习计划

在一般处理程序中,为什么用get传参就不能实现自增,而用post就可以实现自增

-1
[已解决问题] 解决于 2012-10-23 18:32

 public void ProcessRequest(HttpContext context)
    {
        int a = 0;
        if (!string.IsNullOrEmpty(context.Request.Form["isPostBack"]))
        {
            string strNum = context.Request.Form["txtInc"];
            int.TryParse(strNum, out a);
            a=a+1;
        }
        //为什么用get传参就不能实现自增,而用post就可以实现自增
        context.Response.Write("<form action='' method='post'><input type='text' name='txtInc' value='" +
            a.ToString() + "'/><input type='hidden' name='isPostBack' value='1'/><input type='submit'/></form>");
    }

King.Peony的主页 King.Peony | 菜鸟二级 | 园豆:215
提问于:2012-10-23 16:07
< >
分享
最佳答案
0

post请求:context.Request.Form[""] 接收

get请求:context.Request.QueryString[""] 接收

两者都可以用:context.Request[""] 和context.Request.Params[""] 接收

 

 

你的代码错在逻辑,debug一下就看出来了,应该这么写(a在外面定义,要不每次都清零了):

GET版本:

int a = 0;
    public void ProcessRequest(HttpContext context)
    {

        if (!string.IsNullOrEmpty(context.Request.QueryString["isPostBack"]))
        {
            string strNum = context.Request.QueryString["txtInc"];
            int.TryParse(strNum, out a);
            a = a + 1;
        }
        
        //为什么用get传参就不能实现自增,而用post就可以实现自增
        context.Response.Write("<form action='' method='get'><input type='text' name='txtInc' value='" +
            a.ToString() + "'/><input type='hidden' name='isPostBack' value='1'/><input type='submit'/></form>");
    }

 

POST版本:

 int a = 0;
    public void ProcessRequest(HttpContext context)
    {

        if (!string.IsNullOrEmpty(context.Request.Form["isPostBack"]))
        {
            string strNum = context.Request.Form["txtInc"];
            int.TryParse(strNum, out a);
            a = a + 1;
        }
        
        //为什么用get传参就不能实现自增,而用post就可以实现自增
        context.Response.Write("<form action='' method='post'><input type='text' name='txtInc' value='" +
            a.ToString() + "'/><input type='hidden' name='isPostBack' value='1'/><input type='submit'/></form>");
    }

 

如果用context.Request[""] 或者context.Request.Params[""]接收 那么不管提交方式了 get和post提交都能接收到!

奖励园豆:5
oppoic | 小虾三级 |园豆:560 | 2012-10-23 17:32

a定义在ProcessRequest内也是可以的,你可以运行试试,主要问题在:

if 判断也要改,都用 context.Request.QueryString["isPostBack"]

King.Peony | 园豆:215 (菜鸟二级) | 2012-10-23 18:34

@壹卄の➹: 在内的确不影响结果 但是

debug一下就知道,每次都会申明a=0;

你的例子中 a只要申明一次就ok了,之后的累加是在服务器和浏览器之间不断传递a的值 达到累加的效果

定义在里面不影响结果是因为:进了if判断,客户端的浏览器拿到服务器端的a的值又赋了一次值,so 定义a虽然不影响结果,但是是无用功

oppoic | 园豆:560 (小虾三级) | 2012-10-24 12:00
其他回答(2)
0

context.Request.Form 是接受post参数的,你用context.Request.Querystring 是接受get请求参数的,用context.Request[""] 这个是接受get和post都可以的

Plusone | 园豆:342 (菜鸟二级) | 2012-10-23 16:29

按照你说的,我把代码改了一下,但还是没有实现预期的结果

int a = 0;
        if (!string.IsNullOrEmpty(context.Request.Form["isPostBack"]))
        {
            string strNum = context.Request.QueryString["txtInc"];
            int.TryParse(strNum, out a);
            a=a+1;
        }
        context.Response.Write("<form action='' method='get'><input type='text' name='txtInc' value='" +
            a.ToString() + "'/><input type='hidden' name='isPostBack' value='1'/><input type='submit'/></form>");

支持(0) 反对(0) King.Peony | 园豆:215 (菜鸟二级) | 2012-10-23 17:05
0

if 判断也要改,都用 context.Request.QueryString["isPostBack"]

Qlin | 园豆:2403 (老鸟四级) | 2012-10-23 17:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册