23

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

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

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

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

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

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

ありがとう!

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

4

3 に答える 3

35

実際には、Action を使用してコントローラー メソッドにオブジェクトを渡すことができます。これは、利用可能な任意のビューで実行できます。たとえば、共有プロジェクトを参照するプロジェクト bin フォルダーにビルドされる共有ライブラリに 1 つがあります (プロパティ - 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

于 2013-05-02T23:02:24.120 に答える
27

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 });
于 2012-01-22T06:34:27.863 に答える
6

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

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

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

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

于 2013-02-06T11:07:52.540 に答える