Как передать параметры в частичное представление в ASP.NET MVC? - PullRequest
84 голосов
/ 01 июля 2011

Предположим, что у меня есть это частичное представление:

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

, который доступен только через дочернее действие, например:

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

}

И я хочу использовать это частичное представление в другом представлении с:

@Html.RenderPartial("FullName")

Другими словами, я хочу иметь возможность передавать firstName и lastName из представления в частичное представление. Как мне это сделать?

Ответы [ 6 ]

76 голосов
/ 01 июля 2011

Используйте эту перегрузку (RenderPartialExtensions.RenderPartial на MSDN ):

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

, поэтому:

@{Html.RenderPartial(
    "FullName",
    new { firstName = model.FirstName, lastName = model.LastName});
}
73 голосов
/ 19 августа 2015

Вот еще один способ сделать это, если вы хотите использовать ViewData:

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

и получить переданные значения:

@{
    string valuePassedIn = this.ViewData.ContainsKey("VariableName") ? this.ViewData["VariableName"].ToString() : string.Empty;
}
24 голосов
/ 01 июля 2011

Вам необходимо создать модель вида.Нечто подобное должно сделать ...

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 голосов
/ 01 июля 2011

убедитесь, что вы добавили {} вокруг Html.RenderPartial, как:

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

не

@Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});
3 голосов
/ 21 января 2017

Для меня работает dotnet 1.0.1 :

. / OurView.cshtml

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

./_ourPartial.cshtml

<h1>@this.ViewData["hi"]</h1>
0 голосов
/ 04 июля 2017

Просто:

@Html.Partial("PartialName", Model);
...