1

asp.net mvc には、TempData一時データを保持するために使用されるメソッドがあります。シナトラでそれに似たものはありますか?

更新: TempDataになりました。

4

1 に答える 1

2

ViewBag、ViewData、およびTempDataの状態の違いに関するこの記事:

3つのオブジェクトはすべて、ビューとコントローラーの両方のプロパティとして使用できます。

ViewDataは、データを配置するディクショナリオブジェクトであり、ビューで使用できるようになります。ViewDataはViewDataDictionaryクラスの派生物であるため、使い慣れた「キー/値」構文でアクセスできます。

ViewBagオブジェクトは、ViewBagの動的プロパティを作成できるようにするViewDataオブジェクトのラッパーです。

SinatraはMVCモデルを使用せず、Pageコントローラーモデルを使用します。まず、これは、.Netで必要な足場の多くがSinatraでは意味をなさないことを意味します。また、C#(またはその他)ではなくRubyを使用しているため、必要なボイラープレートの多くを見逃しています。

最後に、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

(上記の異なる構文とハッシュオブジェクトの使用に混乱しないでください)

最後に、ViewBagは動的です。言語全体がはるかに動的であるため、Rubyハッシュもそうです。

しかし、あなたは目標ではなく実装を述べているので、何か他のものを探して質問したような気がします。より良い答えを得たい場合は、それをどのように行うべきかだけでなく、何を達成したいのか、何を試したのかを人々に伝えてください。

于 2013-02-13T16:21:01.600 に答える