Foxtable(狐表)用户栏目专家坐堂 → HttpRequest事件里的Return作用咨询


  共有2976人关注过本帖树形打印复制链接

主题:HttpRequest事件里的Return作用咨询

帅哥哟,离线,有人找我吗?
chen3728060
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
HttpRequest事件里的Return作用咨询  发帖心情 Post By:2017/5/13 19:15:00 [只看该作者]

帮助里的标准Weui框架代码是

 

HttpRequest:

'通用事件头,用于发送已经存在的常见文件
Dim
fl As String = "d:\web\" & e.path
If
filesys.FileExists(fl)
    Dim idx As Integer = fl.LastIndexOf(".")
    Dim ext As String  = fl.SubString(idx)
    Select Case ext
        Case ".jpg",".gif",".png",".bmp",".wmf",".js",".css" ,".html",".htm",".zip",".rar"
            e.WriteFile(fl)
            Return
'这里必须返回
    End
Select
End
If
'
以下是动态生成网页的代码
Dim
wb As New WeUI '定义一个基于weui框架的网页生成器
Select
Case e.Path
    Case "addnew.htm",""
        wb.InsertHTML(
"这是默认页面addnew.htm")   
    Case "order.htm"
        wb.InsertHTML(
"这是普通页面order.htm")   
End
Select
e
.WriteString(wb.Build) '生成网页

---------------------------------------------------------------

 

由于我不想经常打开网络管理器(速度太慢),我这样写,可以吗

 

①HttpRequest:

'通用事件头,用于发送已经存在的常见文件
Functions.Execute("Web_GetBasic",e)

 

'以下是动态生成网页的代码
Dim
wb As New WeUI '定义一个基于weui框架的网页生成器
Select
Case e.Path
    Case "addnew.htm",""
        wb.InsertHTML(
"这是默认页面addnew.htm")   
    Case "order.htm"
        wb.InsertHTML(
"这是普通页面order.htm")   
End
Select
e
.WriteString(wb.Build) '生成网页

 

②内部函数Web_GetBasic:

Dim e As RequestEventArgs = args(0)
Dim fl As String = ProjectPath & "HYWeb\" & e.path
If filesys.FileExists(fl)
    Dim idx As Integer = fl.LastIndexOf(".")
    Dim ext As String  = fl.SubString(idx)
    Select Case ext
        Case ".jpg",".gif",".png",".bmp",".wmf",".js",".css" ,".html",".htm",".zip",".rar",".txt"
            e.WriteFile(fl)
            Return "" '这里必须返回
    End Select
End If

 

---------------------------------------------------------------

再后来我觉得打开网络管理器修改生成网页代码也太麻烦,变成

 

①HttpRequest:

Functions.Execute("Web_Main",e)

 

②内部函数Web_Main:

Dim e As RequestEventArgs = Args(0)

 

Functions.Execute("Web_GetBasic",e) '通用事件,获取必要的文件如 css js 等

 

Dim wb As New weui '引用WeUi框架

'以下是动态生成网页的代码
Dim
wb As New WeUI '定义一个基于weui框架的网页生成器
Select
Case e.Path
    Case "addnew.htm",""
        wb.InsertHTML(
"这是默认页面addnew.htm")   
    Case "GetItemSmallClassName.htm"
        Functions.Execute("Web_GetItemSmallClassName",e)

End Select
e
.WriteString(wb.Build) '生成网页

 

内部函数Web_GetBasic:

Dim e As RequestEventArgs = args(0)
Dim fl As String = ProjectPath & "HYWeb\" & e.path
If filesys.FileExists(fl)
    Dim idx As Integer = fl.LastIndexOf(".")
    Dim ext As String  = fl.SubString(idx)
    Select Case ext
        Case ".jpg",".gif",".png",".bmp",".wmf",".js",".css" ,".html",".htm",".zip",".rar",".txt"
            e.WriteFile(fl)
            Return "" '这里必须返回
    End Select
End If

 

④内部函数Web_GetItemSmallClassName:

Dim e As RequestEventArgs = Args(0)

Dim pps As String = DataTables("商品档案").SQLGetComboListString("小类名称","大类名称='" & e.PostValues("大类名称") & "'","小类名称")
e.WriteString("|" & pps)

 

 

以上3种写法,不知道有没问题,会不会有什么隐患,因为这个Return,最大的疑问点就是在这个Return上,最原始是直接在HttpRequest事件里,它可以终止了整个HttpRequest事件,HttpRequest恰恰又是个会重复响应请求的事件,对流程的控制要求非常严格,但是我抽取到内部函数以后,它就变了只终止内部函数,但是外面的整个事件还是在继续执行。这样的写法好吗?求老师给一个比较规范的方法,例如那些可以写内部函数里,那些必须外置。


 

[此贴子已经被作者于2017/5/13 19:20:39编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
  发帖心情 Post By:2017/5/13 20:53:00 [只看该作者]

顶顶


 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
  发帖心情 Post By:2017/5/14 20:47:00 [只看该作者]

顶一下

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/15 8:01:00 [只看该作者]

 return,只能return函数本身而已,不能影响其调用者,你这样写有问题,不能真正的实现return的功能。

 

 你可以这样调用

 

Dim result As String = Functions.Execute("Web_GetBasic",e) '你的函数返回一个值

If result = "" Then

    msgbox("匹配")

    Return ""

Else

    msgbox("不匹配")

    Return "False"

End If


 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
  发帖心情 Post By:2017/5/15 9:47:00 [只看该作者]

我看移动帮助文档,经常都是Return ""  ,返回一个空白的字符串

那为啥是空白字符串,返回  True 或者 False行吗?

 

内部函数Web_GetBasic:

Dim e As RequestEventArgs = args(0)
Dim fl As String = ProjectPath & "HYWeb\" & e.path
If filesys.FileExists(fl)
    Dim idx As Integer = fl.LastIndexOf(".")
    Dim ext As String  = fl.SubString(idx)
    Select Case ext
        Case ".jpg",".gif",".png",".bmp",".wmf",".js",".css" ,".html",".htm",".zip",".rar",".txt"
            e.WriteFile(fl)
            Return true '这里必须返回
    End Select
End If

 

 

if Functions.Execute("Web_GetBasic",e)  then

     msgbox("匹配")

Else

    msgbox("不匹配")

End If

[此贴子已经被作者于2017/5/15 9:48:43编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110572 积分:562750 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2017/5/15 10:40:00 [只看该作者]

可以的

 回到顶部
帅哥哟,离线,有人找我吗?
chen3728060
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:388 积分:5098 威望:0 精华:0 注册:2013/11/2 0:01:00
回复:(有点蓝)可以的  发帖心情 Post By:2017/5/18 9:35:00 [只看该作者]

我还发现一个细节,好像 e.WriteString 有终止代码的效果,这个函数执行了以后,页面就立刻返回数据,后续的代码都不执行了。是这样吗?还是代码继续执行,而后面的 e.WriteString都不输出而已?

[此贴子已经被作者于2017/5/18 9:35:52编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
有点色
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:13837 积分:69650 威望:0 精华:0 注册:2016/11/1 14:42:00
  发帖心情 Post By:2017/5/18 10:08:00 [只看该作者]

以下是引用chen3728060在2017/5/18 9:35:00的发言:

我还发现一个细节,好像 e.WriteString 有终止代码的效果,这个函数执行了以后,页面就立刻返回数据,后续的代码都不执行了。是这样吗?还是代码继续执行,而后面的 e.WriteString都不输出而已?

[此贴子已经被作者于2017/5/18 9:35:52编辑过]

 

e.writeString只能用一次,不能重复用,重复用后面的无效。


 回到顶部