0

我在 abc.cfm 中运行以下表单。

// 参数定义

     <cfparam name="startdate" default="#DateFormat(dateAdd('d',-40,now()), 'yyyy-mm-dd')#">
<cfparam name="enddate" default="#DateFormat(dateAdd('d',-1,now()), 'yyyy-mm-dd')#">






     <cfform format="HTML" action="datedownload.cfm" method="get" >


    <cfformgroup type="horizontal">

      <cfinput type="dateField" name="startdate"  width="100" value="#startdate#">
      <cfinput type="dateField" name="enddate"  width="100" value="#enddate#">
      <cfinput name="submitApply" type="submit" value = "Apply">

        <cfinput type="button" name="download" value="Download" onclick="window.location.href='datedownload.cfm?startdate=#form.startdate#&enddate=#form.enddate#path=http://abc.xyz.com/username/July30/datedownload.cfm'"> 




        </cfformgroup>



        </cfform>

使用 datedownload.cfm 中的以下代码打印一切正常

Startdate: <cfdump var = "#startdate#">
End Date :<cfdump var = "#enddate#">

除此之外,Enddate 正在打印完整路径,如下所示:

Startdate: 2013-06-20 End Date : 2013-07-29path=http://abc.xyz.com/username/July30/datedownload.cfm 

如何删除从路径开始的东西?

4

4 回答 4

5

如果我没看错,当您尝试加载 download.cfm 时,您会收到一个错误,即 startdate 和 enddate 未在表单范围内定义。由于您将这些变量作为查询字符串的一部分传递给 download.cfm(通过使用 GET 提交表单),因此它们不会出现在表单范围内。

我可以想到 2 个快速简便的解决方案:

首先,您可以分别更改对和form.startdate的引用。作为查询字符串的一部分传入的变量(例如当您执行 GET 时)成为 url 范围的一部分,而不是表单范围的一部分(当您执行 POST 时)。form.enddateurl.formdateurl.enddate

其次,您可以在 download.cfm 中像这样参数化变量:

<cfparam name="url.startdate" default="#DateFormat(dateAdd('d',-40,now()), 'yyyy-mm-dd')#">
<cfparam name="url.enddate" default="#DateFormat(dateAdd('d',-1,now()), 'yyyy-mm-dd')#">
<cfparam name="form.startdate" default="#url.startdate#">
<cfparam name="form.enddate" default="#url.enddate#">

这将首先将 url 范围内的值参数化为显示表单的页面中的相同值,然后将表单范围内的相同变量名参数化为 URL 范围内相同变量名的相同值。

于 2013-07-30T00:53:33.867 回答
0

在enddate之前使用 & 符号而不是问号,并在路径变量之前添加 & 符号

window.location.href='Download.cfm?startdate=#form.startdate#&enddate=#form.enddate#&path=http://abc.xyz.com/<username>/Testing/Testing/Download.cfm'
于 2013-07-29T22:20:19.033 回答
0

使用表单帖子有什么问题?这就是我喜欢这样做的方式。我还测试了请求类型(POST 与 GET)以确保下载文件不可收藏。

您需要使用 javascript 来获取基于 Web 的表单中的日期,而不是 ColdFusion。(用户还需要启用 javascript 才能使用表单来使用 location.href。)

为您的表单字段提供匹配 ID 并尝试以下操作:

window.location.href='Download.cfm?startdate='+ document.getElementById('startdate').value +'&enddate='+ document.getElementById('enddate').value +'&path=http://abc.xyz.com/<username>/Testing/Testing/Download.cfm';

我建议不要使用 CFForm 标签,因为它们需要 /CFIDE/ 目录并且目前建议被阻止:

确保在服务器端执行日期验证。如果您需要客户端日期验证,可以使用 HTML5 DOCType 和属性type="date" & required或考虑使用jQuery Validation 插件(优于 CFForm 验证)。

于 2013-07-29T22:50:54.053 回答
0

解决问题的最简单方法是去掉第二个按钮。这不是必需的,而且不仅会让您感到困惑,还会让您的用户感到困惑。由于您的表单方法是“获取”,因此两个表单字段将成为您想要的 url 范围的一部分。

另外,两个输入的值属性中的表单变量来自哪里?

于 2013-07-29T22:53:39.877 回答