我在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
如何删除从路径开始的内容?
答案 0 :(得分:5)
如果我正确读取此内容,则在尝试加载download.cfm时,您会收到一个错误,即startdate和enddate未在表单范围中定义。由于您将这些变量作为查询字符串的一部分传递给download.cfm(通过使用GET提交表单),因此它们不会出现在表单范围中。
我可以想到2个快速简便的解决方案:
首先,您可以将对form.startdate
和form.enddate
的引用分别更改为url.formdate
和url.enddate
。作为查询字符串的一部分传入的变量(比如当你执行GET时)成为url范围的一部分,而不是表单范围(当你执行POST时谎言)。
其次,你可以在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范围中的值设置为显示表单的页面中的相同值,然后它将表单范围中的相同变量名称设置为相同变量名称中的相同值。网址范围。
答案 1 :(得分:0)
在 enddate 之前使用&符号而不是问号,并在路径变量之前添加&符号
window.location.href='Download.cfm?startdate=#form.startdate#&enddate=#form.enddate#&path=http://abc.xyz.com/<username>/Testing/Testing/Download.cfm'
答案 2 :(得分:0)
使用表格帖子有什么问题?这就是我喜欢的方式。我还测试了请求类型(POST与GET)以确保下载文件不可收藏。
您需要使用javascript来获取基于网络的表单中的日期,而不是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 plugin(优于CFForm验证)。
答案 3 :(得分:0)
解决问题的最简单方法是摆脱第二个按钮。这不是必要的,不仅会让您感到困惑,也会让您的用户感到困惑。由于您的表单方法是“获取”,因此两个表单字段将成为URL范围的一部分,这似乎是您想要的。
此外,表单变量来自两个输入的值属性?