2010-12-20 29 views
3

私はMVC 3 w/Razorを使用しており、新しい動的ViewBagプロパティを使用しています。私はEditorFor/LabelFor HTMLヘルパーでViewBagプロパティを使用したいが、構文を理解することはできない。ASP.Net MVC、動的プロパティとEditorFor/LabelFor

ビューには@モデルセットがありますが、使用しようとしているオブジェクトはそのモデルの一部ではありません。私はViewModelを作成することができますが、それは私が何をしているのかわかりません。

誰でも手助けできますか?

コントローラ:

var myModel= _repo.GetModel(id); 
    var newComment = new Comment(); 

    ViewBag.NewComment = newComment; 

    return View(myModel); 

ビュー:

@model Models.MyModel 

@(Html.EditorFor(ViewBag.NewComment.Comment)) 

答えて

5

私はそれを試していないが、これは私が思うはずだ。

@(EditorFor(m => ViewBag.NewComment) 

Linq-to-SQL構文を使用することはできますが、右側で全く異なるオブジェクトを使用することができます。

+0

これは機能しますか? –

+1

@bahadirarslanこれは機能しません(式ツリーには動的式を含めることはできません)。考えられる回避策として、動的モデルを基になる型にキャストすることができます(この回避策については、私の答えを参照してください)。 –

+0

これはカスタムエディタでも機能しません。たとえば、あなたのモデルでこの '[DataType(DataType.Html)、UIHint(" tinymce_jquery_full ")、AllowHtml]'のようなUIHintを使用します。部分ビューを作成し、それにモデルオブジェクトを渡す方が良いでしょう。 –

1

コメントのモデルがどのようなものか知らない、私の腸の反応は次のようになりちょうど行います

@Html.EditorFor(ViewBag.NewComment) 

しかし、 ViewBagは動的なので、EditorFor magを取得するには、使用する前にNewCommentをキャストする必要がありますIC。 EditorForが唯一のパラメータとしての表現を受け入れることができ、その式は、ページモデルのプロパティを返す必要があり、

@Html.EditorFor(ViewBag.NewComment as Comment) 

更新

ストライク。私は、ViewModelを使いたくない場合、EditorForまたはEditorForModelをあなたに使うつもりはないと思います。 ViewBagのそれと一緒に、あなたがModelを使用していることが何であれ、役割を切り替えることを検討しましたか?

+0

「VIEWMODELのモデルを使用してモデルを使用していることは何ですか」という役割を切り替えることを検討しましたか?それ以外の場合、私はあなたが何を意味するか分かりません。 –

+0

こんにちは、私は、EditorForがページのモデルで使用するためにギヤードされているようです。それは確かに私がいつも使ってきた方法です。しかし、私はあなたが達成しようとしているものでメリットを見ることができます。つまり、現在リポジトリのモデルをページモデルに割り当てています。 ViewBagにRepoモデルを割り当て、ページモデルにコメントを割り当てた場合はどうなりますか?それはあなたのビューで可能ですか? ViewModelを使用したくない理由について詳しく説明できますか? – kim3er

+0

私はページ上で使用しているいくつかのモデルを持っています。私はそれが可能である(またはそうでなければならない)と思うだけで、構文を知らないということは、イライラしています。 –

1

何らかの理由でViewDataを使用してモデルをビューに渡す必要がある場合は、Html.DisplayFor()ヘルパーを許可するために次の操作を行います。私は、その基礎となる型に

var newCommentModel = (NewComment)ViewBag.NewComment; 

をViewDataをモデルオブジェクトをキャストビューコードブロックに

そしてIは強い型付け参照

@Html.DisplayFor(model => newCommentModel) 

を表現を使用して、ヘルパーに次の式を割り当てますツリーに厳密に型指定されたモデルが含まれ、DisplayTemplateが正しく表示されます。

関連する問題