Coldfusion表单提交中的Html数据属性

时间:2016-07-19 20:25:22

标签: html coldfusion custom-data-attribute

我理解如何从HTML表单中提取JQuery中的数据属性,但是可以从传递表单的.cfc控制器中完成吗?

Page.cfm

<cfform action="controller.cfc" method="getData">
    <cfinput name="uploadMyData" type="submit" data-primaryID="123">
</cfform>

Controller.cfc

function getData(rc){
    writeDump(rc.uploadMyData.?????(primaryId)????);
}

不确定数据属性是否以任何方式存储在struct中。 我在rc.uploadMyData上尝试了一个getMetaData,但只获得了一个java函数列表。

更新

Adrian J. Moreno

  

数据属性只是影响元素内部数据对象的标记。它们不是表单请求的一部分。您也不会将表单提交给CFC文件。使用Ajax,您可以从data属性中读取值,并将其作为请求数据包的一部分传递给服务器。

所以在 Page.cfm

<script type="text/javascript">
    var otherData = $("#myForm").serialize();
    function sendForm(){
        var primaryID = $("#submitData").data("primaryID");
        jQuery.post("urlpath/controller/",'{"id":'+''+primaryID+'}', function(dataReturn, status){
            //I want to get my form and submit the other data as well to the controller
        }            
    }
</script>

<form id="myForm" action="sendForm()">
        <input name="uploadMyData" id="submitData" type="submit" data-primaryID="123">
        <input name="importantThing" value="#importantVariable#" type="text">
</form>
  

将其作为请求数据包的一部分传递给服务器。

我怎么把它们一起传递? 我希望这个表单提交重定向到另一个页面,所以我不知道我怎么不能使用控制器?表单数据应该通过newPage.cfc来处理它并准备好在newPage.cfm上输出。我使用的是框架1,但这并没有太大的改变。

感谢您的帮助,您怎么看?

更新2

好的,现在我问自己为什么我要提交一份同时提交ajax和coldfusion表格的表格?我意识到这不是应该做的。我可以

  1. 通过JQuery / Ajax提交表单,无需重新加载页面,并在post url中包含data属性并包含序列化表单数据
  2. Page.cfm

    <script type="text/javascript">
        var otherData = $("#myForm").serialize();
        function sendForm(){
            var primaryID = $("#submitData").data("primaryID");
            jQuery.post("controller/method/?primaryId="+primaryID+"",otherData, function(dataReturn, status){
                //do stuff with dataReturn or do a javascript redirect
            }            
        }
    </script>
    

    Controller.cfc

    function method(requestContext){
        //do stuff with that otherData, all stored in request context. includes the primaryID value i appended to the url
        //send it back to the Page.cfm
        fw.renderData("rawjson",jsonString,200,"");
    }
    

    如果它恢复正常,我可以在原始视图中使用该信息运行一个函数。就像在页面上显示一样。

    1. 传统上提交表单会导致页面重新加载。包含一个隐藏的输入类型,其中包含我想要传递的值。
    2. Page.cfm

      <cfform action="controller.method" method="getData">
          <cfinput name="uploadMyData" type="submit" value="Submit Form Button">
          <cfinput name="primaryID" type="hidden" value="123">
      </cfform>
      

      Controller.cfc

      function method(requestContext){
          //do stuff with requestContext.primaryID
          //go to the view method.cfm or do a fw.redirect("new page or back to the page i came from");
      }
      

      为什么我们要两次提交表格?只做一个或另一个。

1 个答案:

答案 0 :(得分:1)

Matt,我认为你对HTML,JavaScript和jQuery非常基本的一些事情感到困惑,并且与ColdFusion无关。

让我们从HTML Form开始。

<form id="{{unique_dom_value}}" action="{{uri}}" method="{{http_verb}}">

  1. unique_dom_value :文档特有的一些字符串。允许您使用JavaScript引用整个表单对象。
  2. uri :您提交表单以进行处理的URI。
  3. http_verb :默认为GET,但您最常使用POST
  4. 您尝试在controller.cfc中发布的URI,但除了将您重定向到ColdFusion CFC检查器之外,它不会执行任何操作。

    在大多数MVC框架的上下文中,index.cfm?event=handler.action使用底层框架在名为action的CFC中调用名为handler的函数。没有框架,您必须手动执行此操作。因此,如果您有一个名为controller.cfc的CFC,并希望将表单数据发送到名为myFunction的函数,则需要说action="controller.cfc?method=myFunction

    但那也不对。提交表单时,浏览器希望加载action属性中的URI。但是你的CFC函数不响应HTML,它会响应其他东西。也许是查询对象,也许是JSON。这就是为什么你要使用jQuery.Ajax()将表单数据(包括数据属性值)发送到CFC的函数,该函数应该以JSON格式返回数据。收到回复后,您可以继续在同一页面上处理或重定向到另一个页面。

    但是,由于您使用的是Framework One,我会查看有关在您的一个处理函数中使用renderData()的文档。