从逻辑的角度来看,我试图在重定向之间保留部分表单数据以获得更好的用户体验,这样用户就不必再次填写整个表单,只需填写无效的部分即可。
从编程的角度来看,我正在尝试将 request.PostForm 数据结构保存在 gorilla session 的 flash 中。重定向后我唯一设法检索的是内存地址的字符串表示形式,例如 [0xc2001c8b10]。
这是验证错误后我保存闪存数据的部分(在此之前执行了 request.ParseForm() ):
session, _ := store.Get(request, "test")
session.AddFlash(err.Error(), "messages")
session.AddFlash(request.PostForm, "form_data")
session.Save(request, response)
http.Redirect(response, request, "/", http.StatusFound)
return
我也尝试用 gob 注册结构但没有效果:
func init() {
gob.Register(&url.Values{})
}
表单值是小写的,例如。“first_name”,“last_name”,如果这可能对此行为产生任何影响。
请记住,我在重定向后成功地检索了“消息”,我唯一的问题是结构数据。
我做错了什么,或者是否有另一种方法可以在我不知道的重定向后填写部分表单?