2012-01-22 44 views
21

MVC3カミソリを使用していますが、部分ビューにオブジェクトを渡そうとしていますが、機能しません。Html.RenderAction(MVC3)でモデルオブジェクトを送信する方法

これは、部分図に、オブジェクトモデルを送信せずに正常に動作します:

このモデルオブジェクトを送信していない、私は代わりにNULL値を取得しています(オブジェクトがデータを持っている、と眺めが期待しよう
Html.RenderAction("Index", "ViewName"); 

それ): '

これはRenderActionでも可能ですか?

ありがとうございます!

編集:エラーが見つかりました。送信されたオブジェクトを受け取っていないコントローラの操作にエラーがあります。あなたのすべての協力に感謝します!

+1

あなたはあなたが呼び出しているアクションの署名を提供できますか? – ivowiblo

+0

なぜviewnameをパラメータとして渡していますか?代わりにアクションとコントローラを渡す必要があります – ivowiblo

+0

@ Html.RenderAction( "Index"、 "ViewName"、new {objectParam1 = objectModel1、objectParam1 = objectModel2}) –

答えて

23

は今、私はすでにモデルを持っている場合のActionResult

public ActionResult FooBar(Foo _foo){ 
    return PartialView(_foo); 
} 

通常

@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 }); 
+0

ありがとうございます。コントローラのアクションシグネチャで見落としたエラーがありました。それを修正し、今はオブジェクトを取得しています。 – Michael

+0

これはModelStateに合格しますか? – aelstonjones

6

それを呼んで作ること最初

public class Foo { 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

作る、あなたがモデルとしてfooを渡したいと言います使用可能な場合は、ACをレンダリングするよりもHtml.Partialを使用する方が理にかなっています。

Foo.cshtmlが強く @model FooProject.Models.FooModelまたは何モデルが呼び出されるとして入力された(おそらくあなたの共有フォルダ内の)ビューファイルである
@Html.Partial("Foo", Model.FooModel) 

。これは、必要なだけ複雑なモデルにすることができます。モデルは、FooModelを設定する必要があるページのメインモデルです。Fooビューで親モデルと同じモデルを使用する場合は、このパラメータを省略してください。

RenderActionは、ルーティング/クエリ文字列パラメータを持つ通常のアクションに対するリクエストをシミュレートするだけで、そのレスポンスをページにダンプするので、一般的には単純なパラメータがある場合より優れています。サイドバーの要素など、ページのモデルで使用できないレイアウトに何かを配置する必要がある場合は、うまく機能します。

29

実際には、アクションを使用してコントローラメソッドにオブジェクトを渡すことができます。これは、私の共有プロジェクト(プロパティ - Visual Studioのビューファイルに新しいものがあればコピー)を参照するプロジェクトのbinフォルダにビルドされた共有ライブラリにあります。それはそうのように行われます。

コントローラー:

public class GroovyController : Controller 
{ 
    public ActionResult MyTestView(MyModel m) 
    { 
     var viewPath = @"~\bin\CommonViews\MyTestView"; 
     return View(viewPath, m); 
    } 
} 

MVCページ(使用レイザー構文):

@Html.Action("MyTestView", "Groovy", new { m = Model }) 

注:@のHtml.Actionで、モデルオブジェクトをはMyModel型でなければならず、3番目のパラメータはコントローラ変数名に設定する必要があります。そのうちのmineはMyModel mです。 mはあなたが割り当てなければならないものなので、m = Modelを割り当てます。

+7

これは受け入れられる回答である必要があります。 1年後にそれを追加していただきありがとうございます。 –

+0

@ Valamas-AUSありがとう:) – theJerm

関連する問題