/ / Wiele modeli widoku w widoku Razor - c #, asp.net-mvc, asp.net-mvc-3, brzytwa

Wiele modeli widoków w widoku Razor - c #, asp.net-mvc, asp.net-mvc-3, brzytwa

Jaki byłby najlepszy sposób, by widok brzytwy obsługiwał wiele modeli? dla aplikacji MVC3.

Mam dwa modele, oba podobne, ale pole kodu jest wymagane dla jednego modelu, a nie dla drugiego

public class IrelandPostcodeLookupViewModel , IWithProgress
{
readonly Progress _Progress = new Progress(Step.Delivery);

public Progress Progress
{
get { return _Progress; }
}

[Required(ErrorMessage = "Please enter your house number or name")]
[DisplayName("House number or name")]
public string HouseNumber { get; set; }

[StringLengthWithGenericMessage(50)]
[DisplayName("Eircode")]
public string Postcode { get; set; }

}

public class PostcodeLookupViewModel , IWithProgress
{
readonly Progress _Progress = new Progress(Step.Delivery);

public Progress Progress
{
get { return _Progress; }
}

[Required(ErrorMessage = "Please enter your house number or name")]
[DisplayName("House number or name")]
public string HouseNumber { get; set; }

[StringLengthWithGenericMessage(50)]
[Required(ErrorMessage = "Please enter your postcode")]
[DisplayName("PostCode")]
public string Postcode { get; set; }

}

W kontrolerze chcę użyć określonego modelu widoku w zależności od kraju, w którym zostałem przekazany. Coś jak

public virtual ActionResult PostcodeLookup(string country)
{
if (country == Country.UnitedKingdom)
return View(new PostcodeLookupViewModel());
else
return View(new IrelandPostcodeLookupViewModel());
}

Zajmowałem się tym w widoku z

@model dynamic

Mam problem z tym, że mój widok zawiera częściowe widoki

@Html.Partial("~/Views/Shared/_Progress.cshtml", Model.Progress)

i napotkam błąd "HtmlHelper" nie ma odpowiedniej metody o nazwie "Partial", ale wydaje się, że ma metodę rozszerzenia o tę nazwę. Metody rozszerzeń nie mogą być dynamicznie wysyłane "

Czy ktoś może doradzić, w jaki sposób mogę sobie poradzić z Częściowym Widokiem?

Dzięki

Odpowiedzi:

1 dla odpowiedzi № 1

Bo Model jest dynamic, również Model.Progress produkuje a dynamic.
Dotyczy to wszystkich właściwości i wywołań funkcji na dynamic obiekt, bez względu na to, jak głęboko pójdziesz.

Aby rozwiązać ten problem, możesz wpisać typ Model.Progress obiekt:

@Html.Partial("~/Views/Shared/_Progress.cshtml", (Progress)Model.Progress)