Załóżmy, że mam taki częściowy pogląd:
Your name is <strong>@firstName @lastName</strong>
który jest dostępny tylko poprzez działanie dziecka, takie jak:
[ChildActionOnly]
public ActionResult FullName(string firstName, string lastName)
{
}
Chcę użyć tego częściowego widoku w innym widoku z:
@Html.RenderPartial("FullName")
Innymi słowy, chcę mieć możliwość przekazywania firstName i lastName z widoku do częściowego widoku. Jak mam to zrobić?
asp.net-mvc
asp.net-mvc-3
model-view-controller
controller
asp.net-mvc-partialview
Saeed Neamati
źródło
źródło
Odpowiedzi:
Użyj tego przeciążenia (
RenderPartialExtensions.RenderPartial
w witrynie MSDN ):public static void RenderPartial( this HtmlHelper htmlHelper, string partialViewName, Object model )
więc:
@{Html.RenderPartial( "FullName", new { firstName = model.FirstName, lastName = model.LastName}); }
źródło
@Html.Partial()
jest taki sam,@{Html.RenderPartial();}
ale znacznie ładniejszy. Mają też takie same przeciążenia.Model.firstName
i ich podobni rzucają wyjątek, któryobject doesn't have a 'firstName' property
Oto inny sposób, aby to zrobić, jeśli chcesz użyć ViewData:
@Html.Partial("~/PathToYourView.cshtml", null, new ViewDataDictionary { { "VariableName", "some value" } })
Aby pobrać przekazane wartości:
@{ string valuePassedIn = this.ViewData.ContainsKey("VariableName") ? this.ViewData["VariableName"].ToString() : string.Empty; }
źródło
Musisz utworzyć model widoku. Coś takiego powinno wystarczyć ...
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; } }
następnie z wyniku działania przekaż model
return View("FullName", new FullNameViewModel("John", "Doe"));
i będziesz mógł uzyskać dostęp
@Model.FirstName
i@Model.LastName
odpowiednio.źródło
pamiętaj, aby dodać {} wokół Html.RenderPartial, jako:
@{Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});}
nie
@Html.RenderPartial("FullName", new { firstName = model.FirstName, lastName = model.LastName});
źródło
{ }
,Następujące działa dla mnie w dotnet 1.0.1 :
./ourView.cshtml
@Html.Partial( "_ourPartial.cshtml", new ViewDataDictionary(this.ViewData) { { "hi", "hello" } } );
./_ourPartial.cshtml
<h1>@this.ViewData["hi"]</h1>
źródło
Właśnie:
@Html.Partial("PartialName", Model);
źródło