Как передать свойство модели частичному представлению с другой моделью?

Учитывая класс модели представления

public class Foo 
{
   public string Fuzz { get; set; }
   public Bar Bar { get; set; }
}

public class Bar
{
   public string Fizz { get; set; }
}

В действии контроллера я передаю в представление следующую модель:

View(new Foo { Fuzz = "Fizz", Bar = new Bar{ Fizz = "Fuzz" } });

В представлении Foo.cshtml

@model Foo

@Model.Fuzz

@{ Html.RenderPartial("BarPartial", Model.Bar); }

В частичном представлении BarPartial.cshtml

@model Bar

@Model.Fizz

Выдается ошибка:

Элемент модели, переданный в словарь, имеет тип Foo, но для этого словаря требуется элемент модели типа Bar.

Как передать свойство родительской модели частичному представлению с моделью, которая является типом свойства?


person stormwild    schedule 24.06.2014    source источник
comment
Это должно работать именно так, как вы показали здесь. Вы уверены, что сделали это именно так в своем реальном коде?   -  person Christoph Fink    schedule 24.06.2014
comment
Подсказка: вместо @{ Html.RenderPartial("BarPartial", Model.Bar); } можно использовать и более короткую @Html.Partial("BarPartial", Model.Bar).   -  person Christoph Fink    schedule 24.06.2014
comment
Спасибо chrfin, это действительно работает над новым проектом MVC5. Но должно быть что-то не так с другим проектом, где я получаю эту ошибку.   -  person stormwild    schedule 24.06.2014
comment
я пробую это, но ваш код отлично работает у меня.   -  person novian kristianto    schedule 24.06.2014


Ответы (2)


public ActionResult test2()
        {
            return View(new Foo { Fuzz = "Fizz", Bar = new Bar { Fizz = "Fuzz" } });
        }

мой взгляд

@model Foo

@Model.Fuzz
@{ Html.RenderPartial("_partial1",Model.Bar); }

мой частичный

@model Bar

@Model.Fizz

нет другого кода, и отлично работает для меня

person novian kristianto    schedule 24.06.2014

Извините, я только что понял ошибку:

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

Эта ошибка произойдет:

The model item passed into the dictionary is of type Foo but this dictionary requires a model  item of type Bar.

if

View(new Foo { Fuzz = "Fizz", Bar = null });
person stormwild    schedule 24.06.2014