在 asp.net mvc 中有一个方法叫做TempData
用于保存临时数据。在 Sinatra 中是否有类似的东西?
更新:它变成了 TempData。
在 asp.net mvc 中有一个方法叫做TempData
用于保存临时数据。在 Sinatra 中是否有类似的东西?
更新:它变成了 TempData。
这篇关于 ViewBag、ViewData 和 TempData 之间差异的文章指出:
所有三个对象都可用作视图和控制器的属性。
和
ViewData 是一个字典对象,您可以将数据放入其中,然后视图可以使用该对象。ViewData 是 ViewDataDictionary 类的派生类,因此您可以通过熟悉的“键/值”语法进行访问。
和
ViewBag 对象是 ViewData 对象的包装器,允许您为 ViewBag 创建动态属性。
Sinatra 不使用 MVC 模型,它使用 Page 控制器模型。首先,这意味着 .Net 中所需的许多脚手架在 Sinatra 中没有意义。此外,因为我们使用的是 Ruby 而不是 C#(或其他),所以我们再次错过了许多所需的样板文件。
最后,在 MVC 到 Page 控制器的说法中,“控制器”基本上是一条路由。所以:
get "/" do
# stuff…
haml :index
end
是一个控制器。如果我们正在寻找一个对路由和视图都可用的字典对象(因此,某种哈希),那么根据文档,我们就在请求范围内。当您在请求范围内时,您可以同时使用:
settings
对象)所以这会起作用:
get "/" do
@viewbag = {a: 1}
haml :index
end
%p= @viewbag[:a]
%p
This will display 1
或这个:
helpers do
def viewbag
@viewbag ||= {}
end
end
get "/" do
viewbag.store :a, 1
haml :index
end
%p= viewbag[:a]
%p
This will display 1
或这个:
get "/" do
viewbag = {:a => 1}
haml :index, :locals => {viewbag: viewbag}
end
%p= viewbag[:a]
%p
This will display 1
(不要被上面不同的语法和Hash对象的使用弄糊涂了)
最后,ViewBag 是动态的。好吧,Ruby Hash 也是如此,因为整个语言更加动态。
但是,我感觉你问这个问题是在寻找其他东西,因为你已经陈述了一个实现而不是一个目标。如果您想获得更好的答案,请告诉人们您想要实现什么以及您尝试过什么,而不仅仅是您认为应该如何完成。