ASP.NET MVCの部分ビューにパラメーターを渡す方法は?


93

私がこの部分的なビューを持っていると仮定します:

Your name is <strong>@firstName @lastName</strong>

これは、次のような子のみのアクションを通じてアクセスできます。

[ChildActionOnly]
public ActionResult FullName(string firstName, string lastName)
{

}

そして、私はこの部分的なビューを別のビューの中で使用したいと思います:

@Html.RenderPartial("FullName")

言い換えれば、firstNameとlastNameをビューから部分ビューに渡すことができるようにしたいのです。どうすればよいですか?


非常に密接に関連する質問:stackoverflow.com/questions/1909134/...
クリスMoschini

回答:


77

このオーバーロードを使用して(RenderPartialExtensions.RenderPartialMSDNで):

public static void RenderPartial(
    this HtmlHelper htmlHelper,
    string partialViewName,
    Object model
)

そう:

@{Html.RenderPartial(
    "FullName",
    new { firstName = model.FirstName, lastName = model.LastName});
}

1
まあ、それを試してみましたが、'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'に最適なオーバーロードメソッドの一致がいくつかの無効な引数エラーを取得しています。コントローラーメソッドを実装するにはどうすればよいですか?入力パラメータが必要ですか?
Saeed Neamati 2011

18
このようにパラメーターを渡したのですが、部分ビューでどのようにアクセスしますか?
ブルジュア

9
また、ブラケットは必要ありません。@Html.Partial()と同じですが@{Html.RenderPartial();}、かなりきれいです。それらは同じオーバーロードも持っています。
smdrager 2012年

7
オブジェクトにどのようにアクセスしますか?Model.firstNameそして彼らのようなものは例外をスローしますobject doesn't have a 'firstName' property
ashes999

4
@ ashes999 ViewDataを介してアクセスできますが、使用方法に固有のモデルを作成するだけで整頓できます。一度使用すると、トスアップだと考える人もいますが、それ以上何度も使用すると、非常に簡単です。
2013年

83

ViewDataを使用する場合の別の方法を次に示します。

@Html.Partial("~/PathToYourView.cshtml", null, new ViewDataDictionary { { "VariableName", "some value" } })

渡された値を取得するには:

@{
    string valuePassedIn = this.ViewData.ContainsKey("VariableName") ? this.ViewData["VariableName"].ToString() : string.Empty;
}

おかげで、あなたの答えはこれのためのモデルを作成することなくトリックを行いました。
alvarodms

すべての例の中で、これは私にとって完全に機能した唯一のものです。ありがとう
BrianLegg

これは私が探していたもので、モデルではありません。ありがとうございました:)
Anupam Roy

素晴らしい答え-MVC 4ではHtml.Partialの代わりにHtml.RenderPartialを使用
Graham Laight 16/07/26

24

ビューモデルを作成する必要があります。このような何かをする必要があります...

public class FullNameViewModel
{
     public string FirstName { get; set; }
     public string LastName { get; set; }

     public FullNameViewModel() { } 

     public FullNameViewModel(string firstName, string lastName)
     {
          this.FirstName = firstName;
          this.LastName = lastName;
     }

}

次に、アクションの結果からモデルを渡します

return View("FullName", new FullNameViewModel("John", "Doe"));

あなたがアクセスすることができます@Model.FirstNameし、@Model.LastNameそれに応じて。


13

Html.RenderPartialの前後に次のように{}を追加してください。

@{Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});}

ない

@Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});

1
パーシャルビューの定義はどのように見えますか?@モデル宣言とは何ですか?その匿名...
エリザベス

はい、必ず追加しください。この記事が{ }見つかるまで時間を無駄にしました
shaijut

4

以下はdotnet 1.0.1で私のために働いています:

./ourView.cshtml

@Html.Partial(
  "_ourPartial.cshtml",
  new ViewDataDictionary(this.Vi‌​ewData) {
    {
      "hi", "hello" 
    } 
  }
);

./_ourPartial.cshtml

<h1>@this.ViewData["hi"]</h1>

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.