【问题标题】:ASP page not receiving POST parametersASP 页面未接收到 POST 参数
【发布时间】:2010-12-25 09:03:50
【问题描述】:

我正在用 Classic ASP 编写一个小应用程序。我有一个页面,它有一个表单,它发布到第二页。表单的 POST 包含文件上传,因此需要 POST 方法。

虽然第二页没有看到第一页发送的任何字段。调用Request("param")Request.Form("param") 都只返回空字符串。

如果我将表单上的方法从 POST 切换为 GET(NO 其他更改),那么接收页面会正确获取这些值,当然我无法进行文件上传,这是此应用程序的关键部分。

在 GET 模式下,参数都按预期放在 url 上。在 POST 模式下,我启动了 FireBug,并检查了我的请求的 POST 数据。原始表单 IS 发送请求中的所有值(它们按预期显示在 FireBug 中),因此问题似乎出在接收页面的一端。

表单正在通过代码提交,从带有onclick="javascript:saveMinutes();"的按钮调用

我的表单和 saveMinutes() 函数声明如下:

<form id="frmMinutes" enctype="multipart/form-data" method="post" action="saveminutes.asp">
<table id="tblMinutes" style="width: 100%;">
    <tr>
        <td>
            <select id="selYear" name="year" size="13" onclick="javascript:setDatePickerRange(); checkForMinutes();">
                <%For lc = Year(Now) To getMinutesFirstYear() Step - 1%>
                    <option value="<%=lc%>" <%If lc = Year(Now) Then%>selected="selected"<%End If%>><%=lc%></option>
                <%Next%>
            </select>
        </td>
        <td>
            <select id="selMonth" name="month" size="13" onclick="javascript:setDatePickerRange(); checkForMinutes();">
                <%For lc = 1 To 12%>
                    <option value="<%=lc%>" <%If lc = Month(Now) Then%>selected="selected"<%End If%>"><%=MonthName(lc)%></option>
                <%Next%>
            </select>
        </td>
        <td style="width: 100%; padding-left: 20px;">
                <table id="enterMinutes" style="width: 100%">
                    <tr>
                        <th>Topic:</th>
                        <td><input id="topic" name="topic" type="text" maxlength="100" field="topic" /></td>
                    </tr>
                     <tr>
                        <th>Presenter:</th>
                        <td><input id="presenter" name="presenter" type="text" maxlength="100" field="presenter" /></td>
                    </tr>
                     <tr>
                        <th>Date:</th>
                        <td><input id="mtgdate" name="mtgdate" type="text" maxlength="10" class="datepick" field="mtgdate" readonly="readonly" /></td>
                    </tr>
                     <tr>
                        <th style="vertical-align: top;">Files:</th>
                        <td style="text-align: left;">
                            <input id="file0" name="file0" type="file" size="35" /><span class="redEmphasis" style="margin: 0px 10px 0px 10px;">(.doc or .docx)</span><input type="button" value="+" onclick="javascript:addFileUpload();" />
                        </td>
                    </tr>
                     <tr>
                        <th style="vertical-align: top;"></th>
                        <td style="text-align: left; padding: 10px 0px 10px 0px;">
                            <input type="button" style="width: 100%" value="update minutes" onclick="javascript:saveMinutes();" />
                        </td>
                    </tr>
               </table>
               <span id="warnexist" class="redEmphasis" style="display: none;">The selected month already has associated minutes (). doc files take precedence over docx.</span>
        </td>
    </tr>
</table>
</form>

保存分钟():

function saveMinutes() {
    if($('form#frmMinutes input[type=text]').filter(function () { return $(this).val() == '' }).length > 0) {
        alert('Please enter all fields.');
        return;
    }

    if ($('form#frmMinutes input#file0').filter(function () { return !$(this).val().match(/.*\.docx?$/i) }).length > 0) {
        alert('First file must be doc or docx.');
        return;
    }

    $('form#frmMinutes input[type=file]').filter(function () { return $(this).val() == '' }).next().remove();
    $('form#frmMinutes input[type=file]').filter(function () { return $(this).val() == '' }).remove();

    removeDupeFiles();

    // reindex file inputs after removing emptys/dupes
    var fs = $('form#frmMinutes input[type=file]:gt(0)');
    for (lc = 1; lc <= fs.length;  lc++) {
        var fid = 'file' + new String(lc);
        $(fs[lc-1]).attr('id', fid).attr('name', fid);
    }

    $('form#frmMinutes')[0].submit();
}

【问题讨论】:

  • 如果您发布用于提取上传文件的代码,那将比您在此处的代码更有用。谢谢。
  • 我一直在使用 Request("param"),我完全忘记了还需要解析/解码的普通参数。我下载了一个用于文件的类,只是没有意识到我还需要将它用于普通输入参数。

标签: post asp-classic parameters input forms


【解决方案1】:

当您的 from 被编码为多部分时,您无法将 POST 值作为普通的旧参数。它们只是多部分表单的附加部分。

要在 ASP 中检索上传的文件,您通常必须遍历各个部分并检查每个部分以查看它是否是一个文件(如果是则保存它)。要获取字段值,您必须添加到该循环以检查每个部分以查看它是否具有您的字段值之一的名称,然后检索该值。这在纯 ASP 代码中是一件很痛苦的事情,所以很多人使用某种类型的文件上传组件,在这种情况下,字段值的检索将取决于该组件。

但基本信息是:无论您对表单进行何种解析以检索文件,您都必须执行相同的操作来检索字段值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-26
    • 2014-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多