¿Cómo pasar parámetros a una vista parcial en ASP.NET MVC?

Supongamos que tengo esta vista parcial:

Your name is @firstName @lastName 

que es accesible a través de una acción solo para niños como:

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

Y quiero usar esta vista parcial dentro de otra vista con:

 @Html.RenderPartial("FullName") 

En otras palabras, quiero poder pasar firstName ans lastName de view a partial view. ¿Cómo debo hacer eso?

Use esta sobrecarga ( RenderPartialExtensions.RenderPartial en MSDN ):

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

asi que:

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

Aquí hay otra forma de hacerlo si quiere usar ViewData:

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

Y para recuperar los valores pasados:

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

Necesita crear un modelo de vista. Algo como esto debería hacer …

 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; } } 

luego, desde su resultado de acción, pase el modelo

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

y podrá acceder a @Model.FirstName y @Model.LastName consecuencia.

asegúrese de agregar {} alrededor de Html.RenderPartial, como:

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

no

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

Lo siguiente está funcionando para mí en dotnet 1.0.1 :

./ourView.cshtml

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

./_ourPartial.cshtml

 

@this.ViewData["hi"]

Sólo:

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