Html <;选择多个>;和enctype=";“多部分/表单数据”;

Html <;选择多个>;和enctype=";“多部分/表单数据”;,html,asp-classic,multipartform-data,enctype,Html,Asp Classic,Multipartform Data,Enctype,我想知道是否可以同时使用enctype=“multipart/form data”和select multiple。下面是演练: 我有这个html文件(test.html): 弗斯特 第二 第三 当我在列表中选择这些选项时,我的操作页面不会显示任何内容(action.asp): 但是如果我删除test.html中的enctype=“multipart/form data”,那么它就可以工作了 问题是我使用的asp上载文件组件需要此enctype=“multipart/form dat

我想知道是否可以同时使用enctype=“multipart/form data”和select multiple。下面是演练:

我有这个html文件(test.html):


弗斯特
第二
第三

当我在列表中选择这些选项时,我的操作页面不会显示任何内容(action.asp):


但是如果我删除test.html中的enctype=“multipart/form data”,那么它就可以工作了

问题是我使用的asp上载文件组件需要此enctype=“multipart/form data”。有什么建议吗

提前感谢。

如果您使用enctype=“multipart/form data”,那一定是因为您正在上载文件。如果上载文件,则应使用上载组件。如果上载,则可以使用:

设置上载组件= CreateObject(“您的.UploadComponentClassString”)
sFormValue=yourUploadComponent.Form.Item(“prof”).Value


最后在FileUploader类上发现了一个bug。mcolFormElem Dictionary变量不会添加名称/值对。如果
元素的集合中已经存在名称/值对,我已经添加了下面的代码,工作正常

If Not mcolFormElem.Exists(LCase(sInputName)) Then 
                mcolFormElem.Add LCase(sInputName), CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            else
                dim tempKeyVal
                tempKeyVal=mcolFormElem.item(LCase(sInputName))
                mcolFormElem.Remove(LCase(sInputName))
                mcolFormElem.Add LCase(sInputName), tempKeyVal&","&CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            end if

如果我这样做,我只会得到第一个选中的项目:prof=Uploader.form(“prof”),如果我按照您的建议:sFormValue=Uploader.form.item(“prof”).Value我收到此错误:Microsoft VBScript运行时错误“800a01c2”参数数错误或属性分配无效:“Form”还使用什么组件?我将尝试用作数组并向您提供反馈。这是一个完全基于Jacob“Beezle”Gilley制作的ASP的组件。我用JavaScript做了一个函数,将选择倍数的值保存到输入type=“hidden”中,现在它可以工作了。@pcromano虽然这个答案是正确的,但没有解释为什么。当您使用
enctype=“multipart/form data”
时,您会告诉服务器您正在发布的数据将作为多部分二进制数据发布,并且由您来解析并检索各个多部分。经典ASP为此有一个特定的响应对象方法,称为
Response.BinaryRead
Response.BinaryWrite
。尝试使用
Request.Form
将不起作用,它不知道多部分数据。最常见的用途是上传文件(如图像、文档等),但不是唯一的用途。如果您使用的是ASPUpload组件,请检查:这确实是一个不错的解决方案,但我没有使用ASPUpload组件。
<%

dim prof

prof = request.form("prof")

response.write prof 

%>     
If Not mcolFormElem.Exists(LCase(sInputName)) Then 
                mcolFormElem.Add LCase(sInputName), CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            else
                dim tempKeyVal
                tempKeyVal=mcolFormElem.item(LCase(sInputName))
                mcolFormElem.Remove(LCase(sInputName))
                mcolFormElem.Add LCase(sInputName), tempKeyVal&","&CWideString(MidB(biData, nPosBegin, nPosEnd-nPosBegin))
            end if