MVC3カミソリを使用していますが、オブジェクトを部分ビューに渡そうとしていますが、機能していません。
これは、オブジェクトモデルを部分ビューに送信しなくても正常に機能します。
Html.RenderAction("Index", "ViewName");
これを試してもモデルオブジェクトは送信されず、代わりにnullが取得されます(オブジェクトにはデータがあり、ビューはそれを予期しています)。
Html.RenderAction("Index", "ViewName", objectModel);
これはRenderActionを使用しても可能ですか?
ありがとう!
編集:エラーが見つかりました。送信されたオブジェクトをピックアップしなかったコントローラーのアクションにエラーがありました。ご助力いただきありがとうございます!
foo
をモデルとして渡したい場合、最初に作成します
public class Foo {
public string Name { get; set; }
public int Age { get; set; }
}
actionResultを作成します
public ActionResult FooBar(Foo _foo){
return PartialView(_foo);
}
あれを呼べ
@Html.RenderAction("FooBar", "Controller", new { Name = "John", Age=20 });
Actionを使用して、実際にオブジェクトをコントローラーメソッドに渡すことができます。これは、任意の使用可能なビューで実行できます。たとえば、共有プロジェクトを参照するプロジェクトbinフォルダーにビルドされる共有ライブラリにあります(プロパティ-Visual Studioのビューファイルで新しい場合はコピー)。それは次のように行われます:
コントローラー:
public class GroovyController : Controller
{
public ActionResult MyTestView(MyModel m)
{
var viewPath = @"~\bin\CommonViews\MyTestView";
return View(viewPath, m);
}
}
MVCページ(Razor構文を使用):
@Html.Action("MyTestView", "Groovy", new { m = Model })
またはRenderAction
メソッドを使用:
@{ Html.RenderAction("MyTestAction", "MyTestController", new { area = "area", m = Model }); }
注:@Html.Action()
では、Model
オブジェクトはMyModel
型である必要があり、その3番目のパラメーターはコントローラー変数名に設定する必要があります。コントローラー変数名はMyModel m
です。 m
を割り当てる必要があるため、m = Model
を実行します。
通常、モデルがすでに利用可能な場合、アクションをレンダリングするよりもHtml.Partial
を使用する方が理にかなっています。
@Html.Partial("Foo", Model.FooModel)
Foo.cshtml
は、@model FooProject.Models.FooModel
またはモデルが呼び出されたもので強力に入力されたビューファイル(おそらく共有フォルダー内)です。これは、必要に応じて複雑なモデルにすることができます。モデルは、FooModel
を設定する必要があるページのメインモデルです。または、Foo
ビューが親ページと同じモデルを使用する場合は、このパラメーターを省略します。
RenderAction
は、単純なパラメーターがある場合に一般的に優れています。ルーティング/クエリ文字列パラメーターを持つ通常のアクションへの要求をシミュレートし、その応答をページにダンプするためです。サイドバーの要素など、ページのモデルでは使用できないレイアウトに何かを配置する必要がある場合に、うまく機能します。