2011-11-16 13 views
6

にViewBag動的オブジェクトのプロパティを設定します予想される "こんにちは"ページ。は、私はC#でこのアクションメソッドを有するF位

私はF#でコントローラーを使いたいです。私は試しました

type MainController() = 
    inherit Controller() 
    member x.Index() = 
    x.ViewBag?Message <- "Hello" 
    x.View() 

これは、 "メソッドまたはオブジェクトのコンストラクタ 'op_DynamicAssignment'が見つかりません"というエラーメッセージが生成されます。

ダイナミック演算子のF#コードサンプルのいくつかを見てきましたが、数ページの説明やコードの行数よりも短いものは表示されません。彼らはこのプロパティ "セッター"にはあまりにも一般的すぎるようです。

答えて

10

ViewBagプロパティはちょうどそれは、C#から動的にアクセスできるように、タイプdynamicのプロパティとしてViewDataコレクションを公開するラッパーであります(プロパティセット構文を使用して)。あなたは(this discussion at SOを参照)ことを行うにはDLRに基づいて?の実装を使用することができますが、(ViewDataプロパティによって公開されている)ViewDataDictionaryに直接データを追加?演算子を定義する方が簡単です:

let (?<-) (viewData:ViewDataDictionary) (name:string) (value:'T) = 
    viewData.Add(name, box value) 

その後、書くことができるはずです

x.ViewData?Message <- "Hello" 
+0

よろしく!出来た! :) –

+0

#Tomas私はあなたのF#空のWebテンプレートをhttp://msdn.microsoft.com/en-us/library/hh304375.aspxで説明しましたが、このコードをわずか1分で生成しました問題は実際のプロジェクトで発生しました)。 –

+0

私はTempDataにもそれを提供する必要があったので、最初のパラメータを '(dictionary:IDictionary )' –

1

代わりの

x?ViewBag <- "Hello" 

試してみてください。

x.ViewBag?Message <- "Hello" 
+0

ありがとうございます。私はそれをしましたが、それでも "メソッドまたはオブジェクトコンストラクタ 'op_DynamicAssignment'が見つかりません"を生成します。私はこの質問を編集してこの提案を含めるようにしました。 –

関連する問題