web-dev-qa-db-ja.com

Html.RenderAction(MVC3)でモデルオブジェクトを送信する方法

MVC3カミソリを使用していますが、オブジェクトを部分ビューに渡そうとしていますが、機能していません。

これは、オブジェクトモデルを部分ビューに送信しなくても正常に機能します。

Html.RenderAction("Index", "ViewName");

これを試してもモデルオブジェクトは送信されず、代わりにnullが取得されます(オブジェクトにはデータがあり、ビューはそれを予期しています)。

Html.RenderAction("Index", "ViewName", objectModel);

これはRenderActionを使用しても可能ですか?

ありがとう!

編集:エラーが見つかりました。送信されたオブジェクトをピックアップしなかったコントローラーのアクションにエラーがありました。ご助力いただきありがとうございます!

23
Michael

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 });
25
John x

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を実行します。

33
theJerm

通常、モデルがすでに利用可能な場合、アクションをレンダリングするよりもHtml.Partialを使用する方が理にかなっています。

@Html.Partial("Foo", Model.FooModel)

Foo.cshtmlは、@model FooProject.Models.FooModelまたはモデルが呼び出されたもので強力に入力されたビューファイル(おそらく共有フォルダー内)です。これは、必要に応じて複雑なモデルにすることができます。モデルは、FooModelを設定する必要があるページのメインモデルです。または、Fooビューが親ページと同じモデルを使用する場合は、このパラメーターを省略します。

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

6
Simon_Weaver