如何通过使用POST/表单叶模板传递数据?

编程入门 行业动态 更新时间:2024-10-26 00:21:18
本文介绍了如何通过使用POST/表单叶模板传递数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

在对蒸气/叶/html的理解上,我有两个主要的空白.我正在使用使用蒸气的beta分支创建的"todo"示例进行工作.

I have a couple of major gaps in my understanding of vapor/leaf/html. I am working from the "todo" example that is created using the beta branch of vapor.

首先,我建立了自己的流利模型(我不知道有什么问题):

First, I made my own fluent model (no problems that I know of):

import FluentSQLite import Vapor final class affordatmodel: SQLiteModel { var id: Int? var propertyCost: String var targetEquity: String var interestRate: String var amortization: String var sponsor1: String var sponsor2: String var rent: String var rentInflation: String var propertyTaxes: String var propertyTaxesInflation: String var strataFees: String var strataFeesInflation: String init(propertyCost: String, targetEquity: String, interestRate: String, amortization: String, sponsor1: String, sponsor2: String, rent: String, rentInflation: String, propertyTaxes: String, propertyTaxesInflation: String, strataFees: String, strataFeesInflation: String) { self.propertyCost = propertyCost self.targetEquity = targetEquity self.interestRate = interestRate self.amortization = amortization self.sponsor1 = sponsor1 self.sponsor2 = sponsor2 self.rent = rent self.rentInflation = rentInflation self.propertyTaxes = propertyTaxes self.propertyTaxesInflation = propertyTaxesInflation self.strataFees = strataFees self.strataFeesInflation = strataFeesInflation } } /// Allows to be used as a dynamic migration. extension affordatmodel: Migration { } /// Allows to be encoded to and decoded from HTTP messages. extension affordatmodel: Content { } /// Allows to be used as a dynamic parameter in route definitions. extension affordatmodel: Parameter { }

然后我创建一个实例并将其发送到叶子模板:

Then I make an instance and send it to a leaf template:

let defaultData = affordatmodel(propertyCost: "700000", targetEquity: "300000", interestRate: "1", amortization: "20", sponsor1: "500000", sponsor2: "200000", rent: "1200", rentInflation: "1", propertyTaxes: "8000", propertyTaxesInflation: "1", strataFees: "0", strataFeesInflation: "0") return leaf.render("welcome", ["affordat": defaultData])

并且我的Leaf模板成功使用默认数据(此处显示的正文)填充html:

And my Leaf template successfully populates the html with the default data (body shown here):

<body class="container"> <h1>Payment and Principal Calculations</h1> <form action="/affordat" method="POST"> <div class="form-group"> <label for="propertyCost">Property Cost</label> <input type="number" class="form-control" name="propertyCost" placeholder="#(affordat.propertyCost)"> </div> <div class="form-group"> <label for="targetEquity">Target Equity</label> <input type="number" class="form-control" name="targetEquity" placeholder="#(affordat.targetEquity)"> </div> <div class="form-group"> <label for="interestRate">Interest Rate</label> <input type="number" class="form-control" name="interestRate" placeholder="#(affordat.interestRate)"> </div> <div class="form-group"> <label for="amortization">Amortization (years)</label> <input type="number" class="form-control" name="amortization" placeholder="#(affordat.amortization)"> </div> <div class="form-group"> <label for="sponsor1">Sponsor 1 Funds</label> <input type="number" class="form-control" name="sponsor1" placeholder="#(affordat.sponsor1)"> </div> <div class="form-group"> <label for="sponsor2">Sponsor 2 Funds</label> <input type="number" class="form-control" name="sponsor2" placeholder="#(affordat.sponsor2)"> </div> <div class="form-group"> <label for="rent">Rent</label> <input type="number" class="form-control" name="rent" placeholder="#(affordat.rent)"> </div> <div class="form-group"> <label for="rentInflation">Rent Inflation (will be used exactly)</label> <input type="number" class="form-control" name="rentInflation" placeholder="#(affordat.rentInflation)"> </div> <div class="form-group"> <label for="propertyTaxes">Property Taxes (first year est.)</label> <input type="number" class="form-control" name="propertyTaxes" placeholder="#(affordat.propertyTaxes)"> </div> <div class="form-group"> <label for="propertyTaxesInflation">Property Taxes Inflation (est.)</label> <input type="number" class="form-control" name="propertyTaxesInflation" placeholder="#(affordat.propertyTaxesInflation)"> </div> <div class="form-group"> <label for="strataFees">Strata Fees (first year est.)</label> <input type="number" class="form-control" name="strataFees" placeholder="#(affordat.strataFees)"> </div> <div class="form-group"> <label for="strataFeesInflation">Strata Fees Inflation (est.)</label> <input type="number" class="form-control" name="strataFeesInflation" placeholder="#(affordat.strataFeesInflation)"> </div> <input type="hidden" name="_csrf" value="{{csrfToken}}"> <button type="submit" class="btn btn-primary">Refresh Calculations</button> </form> </body>

太好了,所以我知道如何将流畅的数据转换为HTML.我的问题是我不知道该如何找回.当发生发布"时,数据似乎没有传递到控制器.我的路线是:

Great, so I know how to get fluent data to HTML. My problem is I don't know how to get it back. When the "Post" occurs, the data does not seem to get passed to the controller. My route is:

router.post("affordat", use: affordatController.create)

控制器的相关部分如下所示:

And the relevant part of my controller looks like this:

import Vapor final class AffordatController { func create(_ req: Request) throws -> Future<affordatmodel> { return try req.content.decode(affordatmodel.self).flatMap(to: affordatmodel.self) { affordatmodel1 in return affordatmodel1.save(on: req) } } }

哪个显示了我的一个模型,带有ID#,但没有数据.而且我有点理解为什么,因为我似乎并没有真正将发布数据发送到控制器. 我应该如何将POST数据发送到控制器?我的叶子模板,路由或控制器出现问题了吗?

Which shows me one of my models, with an ID #, but no data. And I kind of understand why because I didn't really seem to send the post data to the controller. How I am supposed to send the POST data to the controller? Is the problem in my leaf template, my route, or my controller?

推荐答案

看起来应该可以.您可以在浏览器的网络检查器中检查发送到服务器的数据.确保保留日志,并且能够看到POST请求和发送到服务器的数据.

It looks like it should work. You can inspect the data being sent to your server in the network inspector in your browser. Make sure you preserve logs and you'll be able to see the POST request and the data sent to the server.

如果在请求中的每个点都有断点,则可以看到数据是什么.

If you breakpoint at each point in the request you can see what the data is.

顺便说一句,您似乎正在提交一个空表格,因此它只是将所有内容填充为空白字符串.您是要在表单输入中使用value而不是placeholder吗?值将为用户预先填充数据,占位符将向用户显示该值作为建议,但不会在表单提交中发送数据.

As an aside, it looks like you're submitting an empty form, so it's just filling everything in as blank strings. Do you mean to use value instead of placeholder in the form inputs? Value will pre-populate the data for the user, placeholder will show the value to the user as a suggestion but won't send the data in the form submission.

更多推荐

如何通过使用POST/表单叶模板传递数据?

本文发布于:2023-10-12 00:15:21,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1483241.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:表单   模板   数据   POST

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!