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 № 1Bo 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)