Создание частичных представлений действительно многократно используемых

87
10

Моя цель - создать частичное представление, которое может использоваться в десятках других представлений в приложении MVC. Это частичное представление будет принимать данные из родительской модели просмотра для использования в качестве ее модели.

Моя проблема в том, что я не знаю, как отправить эти данные из родительской модели представления в частичное представление. Вот какой код:

МОДЕЛЬ КЛАССА РОДИТЕЛЕЙ:

public class TestModel
{
public int ID { get; set; }
public string Name { get; set; }
public GlobalPartialView GPV { get; set; }
}

ЧАСТИЧНЫЙ МОДЕЛЬ КЛАССА:

public class GlobalPartialView
{
public string PartialViewString { get; set; }
}

РОДИТЕЛЬСКИЙ ВЗГЛЯД:

@model TestMVC_CRUD.Models.TestModel

@{
ViewBag.Title = "Index";
}

<h2>Index</h2>

<div>
<div>ID: @Model.ID</div>
<div>Name: @Model.Name</div>
</div>

@Html.Partial("_GlobalPartialView", Model.GPV);

ЧАСТИЧНЫЙ ВИД:

@model TestMVC_CRUD.Models.GlobalPartialView

@{
ViewBag.Title = "View1";
}

<h2>View1</h2>

<div>Value: @Model.PartialViewString</div>

Этот код не работает. Частичный вид не будет принимать Model.GPV в качестве его модели.

Как отправить подчиненный объект из родительской модели View в частичный вид для использования в качестве модели? Кроме того, если есть лучший способ добиться этого, я бы хотел его услышать.

спросил(а) 2014-06-10T23:14:00+04:00 6 лет, 1 месяц назад
1
Решение
55

Этот код должен работать. Похоже, вы забыли заполнить свойство GPV основной модели представления, когда вы отобразили родительское представление. И вы просто получили NRE, потому что вы частично видите доступ к @Model.PartialViewString.

Убедитесь, что действие контроллера, отображающее родительское представление, фактически GPV свойство GPV:

var model = new TestModel();
model.GPV = new GlobalPartialView();
model.GPV.PartialViewString = "The foo bar";
return View(model);

ответил(а) 2014-06-10T23:35:00+04:00 6 лет, 1 месяц назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема