Как передать параметры частичному виду в ASP.NET MVC?
предположим, что у меня есть частичный вид:
Your name is <strong>@firstName @lastName</strong>
который доступен только через дочернее действие, такое как:
[ChildActionOnly]
public ActionResult FullName(string firstName, string lastName)
{
}
и я хочу использовать этот частичный вид в другой вид:
@Html.RenderPartial("FullName")
другими словами, Я хочу иметь возможность передавать firstName и lastName из представления в частичное представление. Как мне это сделать?
6 ответов
используйте эту перегрузку (RenderPartialExtensions.RenderPartial
на MSDN):
public static void RenderPartial(
this HtmlHelper htmlHelper,
string partialViewName,
Object model
)
так:
@{Html.RenderPartial(
"FullName",
new { firstName = model.FirstName, lastName = model.LastName});
}
вот еще один способ сделать это, если вы хотите использовать ViewData:
@Html.Partial("~/PathToYourView.cshtml", null, new ViewDataDictionary { { "VariableName", "some value" } })
и для извлечения переданных значений:
@{
string valuePassedIn = this.ViewData.ContainsKey("VariableName") ? this.ViewData["VariableName"].ToString() : string.Empty;
}
вам нужно создать модель представления. Что-то вроде этого должно сработать...
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
соответственно.
убедитесь, что вы добавили {} вокруг Html.RenderPartial, as:
@{Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});}
не
@Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});
Following работает для меня на dotnet ограничителя 1.0.1:
./ ourView.cshtml по
@Html.Partial(
"_ourPartial.cshtml",
new ViewDataDictionary(this.ViewData) {
{
"hi", "hello"
}
}
);
./_ourPartial.cshtml по
<h1>@this.ViewData["hi"]</h1>