使用服务器端 Javascript 访问经典 Asp 上的表单数据

问题描述 投票:0回答:3

我正在使用 asp javascript 实现 html 表单的服务器端验证,并且我遇到了一些意外的行为..我的 asp 和 html 代码如下:

<%
var bread = String(Request.Form("bread"));
if (!bread)
    Response.Write("Choose a bread!");
%>
<br/>

    <select id="breadDropDown" name="bread">
        <option value=""></option>
        <option value="white">white</option>
        <option value="wheat">wheat</option>
        <option value="flatbread">flatbread</option>
    </select>

</div>

这里我得到了我想要的行为,即在 GET 上不写入任何内容,而在无效 POST 上写入错误。

<%
var meat = String(Request.Form("meat"));
if (!meat)
    Response.Write("Choose a meat!");
%>
<br/>

    <input type="checkbox" name="meat" value="turkey">turkey</input><br />
    <input type="checkbox" name="meat" value="ham">ham</input><br />
    <input type="checkbox" name="meat" value="roast beef">roast beef</input><br />
    <input type="checkbox" name="meat" value="double meat">double meat</input><br />

</div>

但是,当我使用一组复选框而不是选择框时,我会得到不正确的行为......即写入时没有错误。

任何见解都会有所帮助,因为我找不到大量有关带有 javascript 的 classis asp 的资源。

谢谢!

javascript html validation post asp-classic
3个回答
0
投票

Request.Form("meat") 会给你 undefined

Request("meat") 将为您提供以逗号分隔的字符串检查的值(例如火鸡、火腿)


0
投票

我一直认为你需要在输入标签周围放置一个表单标签。

<form name='frmFood' id='frmFood' method='post'>
<input or select>
</form>

0
投票

Graham 和 ScotterMonkey 的两个现有答案有点触及根本问题,但我会尝试更完整地综合它们,并提供一些有用的背景。

ASP Classic 提供了一个

Request
对象,它具有多种集合属性,例如:

Request.Form

Request.QueryString

Request.ServerVariables

在原始问题提供的代码中,您正在尝试访问

Request.Form("meat")
。然而,ASP 的
Request.Form
集合仅通过提交 HTML form 元素 来填充,并且由于代码的 HTML 部分中没有声明 HTML form 元素,因此
Request.Form
无法访问任何内容。

但是,正如用户 Graham 指出的那样,

Request
对象似乎能够通过关联的
name
属性访问请求页面的 HTML 元素。因此,访问
Request("meat")
会返回页面上每个元素的列表,其 name 属性对应于“meat”。

有关 ASP 内置请求对象的 Microsoft 文档有助于跟踪此类旧代码。 https://learn.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms524948(v=vs.90)

© www.soinside.com 2019 - 2024. All rights reserved.