如何使用Beego解析html表单数组.
<input name="names[]" type="text" />
<input name="names[]" type="text" />
<input name="names[]" type="text" />
去Beego
type Rsvp struct {
Id int `form:"-"`
Names []string `form:"names[]"`
}
rsvp := Rsvp{}
if err := this.ParseForm(&rsvp); err != nil {
//handle error
}
input := this.Input()
fmt.Printf("%+v\n", input) // map[names[]:[name1 name2 name3]]
fmt.Printf("%+v\n", rsvp) // {Names:[]}
Run Code Online (Sandbox Code Playgroud)
为什么Beego ParseForm方法返回一个空名称?
如何获取rsvp.Names的值?
小智 6
感谢@ysqi 给我提示。我添加了一些详细的示例来解析 beego 中类似表单数据的关联数组
这是我的表单结构:
<input name="contacts[0][email]" type="text" value="a1@gmail.com"/>
<input name="contacts[0][first_name]" type="text" value="f1"/>
<input name="contacts[0][last_name]" type="text" value="l1"/>
<input name="contacts[1][email]" type="text" value="a2@gmail.com"/>
<input name="contacts[1][first_name]" type="text" value="f2"/>
<input name="contacts[1][last_name]" type="text" value="l2"/>
Run Code Online (Sandbox Code Playgroud)
golang(beego)代码:
contacts := make([]map[string]string, 0, 3)
this.Ctx.Input.Bind(&contacts, "contacts")
Run Code Online (Sandbox Code Playgroud)
联系人变量:
[
{
"email": "user2@gmail.com",
"first_name": "Sam",
"last_name": "Gamge"
},
{
"email": "user3@gmail.com",
"first_name": "john",
"last_name": "doe"
}
]
Run Code Online (Sandbox Code Playgroud)
现在你可以像这样使用它:
for _, contact := range contacts {
contact["email"]
contact["first_name"]
contact["last_name"]
}
Run Code Online (Sandbox Code Playgroud)
从Request的FormValue方法的实现中可以看到,如果有多个值,它会返回第一个值: http://golang.org/src/pkg/net/http/request.go?s=23078: 23124#L795 最好获取属性本身 r.Form[key] 并手动迭代所有结果。我不确定 Beego 是如何工作的,但只需使用原始的 Request.ParseForm 和 Request.Form 或 Request.PostForm 映射就可以完成这项工作。 http://golang.org/src/pkg/net/http/request.go?s=1939:6442#L61
| 归档时间: |
|
| 查看次数: |
4483 次 |
| 最近记录: |