以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  HttpRequest事件里的Return作用咨询  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=100558)

--  作者:chen3728060
--  发布时间:2017/5/13 19:15:00
--  HttpRequest事件里的Return作用咨询

帮助里的标准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
--  发布时间:2017/5/13 20:53:00
--  

顶顶


--  作者:chen3728060
--  发布时间:2017/5/14 20:47:00
--  
顶一下
--  作者:有点色
--  发布时间: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
--  发布时间: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编辑过]

--  作者:有点蓝
--  发布时间:2017/5/15 10:40:00
--  
可以的
--  作者:chen3728060
--  发布时间:2017/5/18 9:35:00
--  回复:(有点蓝)可以的

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

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

--  作者:有点色
--  发布时间: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只能用一次,不能重复用,重复用后面的无效。