2016-10-27 10 views
1

Что было бы лучшим способом для просмотра бритвой для обработки нескольких моделей? для приложения MVC3.Модели с несколькими видами в режиме Razor

У меня есть две модели, обе похожи, но почтовый индекс поле обязательно для одной модели, а не для другого

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

} 

В контроллере Я хочу использовать конкретную модель представления в зависимости от страны, я прошел , Что-то вроде

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

я это с точки зрения обращения с

@model dynamic 

У меня есть проблема с этим мой взгляд содержит частичный вид

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

и я бегу в ошибку " HtmlHelper 'не имеет применимого метода с именем «Partial», но по этому имени имеет метод расширения. Методы расширения не могут быть динамически отправлены '

Может ли кто-нибудь посоветовать, как я могу обрабатывать частичный вид?

Благодаря

ответ

1

Поскольку Model является dynamic, также Model.Progress производит dynamic.
Это справедливо для всех свойств и вызовов функций объекта dynamic, независимо от того, насколько глубоко вы пойдете.

Чтобы решить эту проблему можно типаж на Model.Progress объект:

@Html.Partial("~/Views/Shared/_Progress.cshtml", (Progress)Model.Progress) 
Смежные вопросы