Supposons que j'ai cette vue partielle:
Your name is <strong>@firstName @lastName</strong>
qui est accessible via une action enfant seulement comme:
[ChildActionOnly]
public ActionResult FullName(string firstName, string lastName)
{
}
Et je veux utiliser cette vue partielle dans une autre vue avec:
@Html.RenderPartial("FullName")
En d'autres termes, je veux pouvoir passer firstName et lastName d'une vue à une vue partielle. Comment devrais-je faire ça?
Utilisez cette surcharge ( RenderPartialExtensions.RenderPartial
sur MSDN ):
public static void RenderPartial(
this HtmlHelper htmlHelper,
string partialViewName,
Object model
)
alors:
@{Html.RenderPartial(
"FullName",
new { firstName = model.FirstName, lastName = model.LastName});
}
Voici une autre façon de le faire si vous souhaitez utiliser ViewData:
@Html.Partial("~/PathToYourView.cshtml", null, new ViewDataDictionary { { "VariableName", "some value" } })
Et pour récupérer les valeurs passées:
@{
string valuePassedIn = this.ViewData.ContainsKey("VariableName") ? this.ViewData["VariableName"].ToString() : string.Empty;
}
Vous devez créer un modèle de vue. Quelque chose comme ça devrait faire ...
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;
}
}
puis de votre résultat d'action passe le modèle
return View("FullName", new FullNameViewModel("John", "Doe"));
et vous pourrez accéder à @Model.FirstName
et à @Model.LastName
en conséquence.
assurez-vous d’ajouter {} autour de Html.RenderPartial, en tant que:
@{Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});}
ne pas
@Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});
Ce qui suit fonctionne pour moi sur dotnet 1.0.1:
./ ourView.cshtml
@Html.Partial(
"_ourPartial.cshtml",
new ViewDataDictionary(this.ViewData) {
{
"hi", "hello"
}
}
);
./_ ourPartial.cshtml
<h1>@this.ViewData["hi"]</h1>
Juste:
@Html.Partial("PartialName", Model);