Обмен данными из Layout в RenderBody - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь поделиться данными из моего основного _Layout с представлениями, отображаемыми RenderBody.

Я пытался использовать ViewBag, инициализированный в «Shared / _Layout», но он не работает. Тем не менее, я заметил, что этот ViewBag можно использовать в партиалах, но не в представлениях, отображаемых @ RenderBody.

Пример _Layout:

PageData["XX"] = "myValue";
ViewContext.Controller.ViewBag.XX= "myValue";
Page.XX= "myValue"; 
ViewBag.XX= "myValue";
ViewContext.ViewData["XX"] = "myValue";

<body>
    @Html.Partial("_MyPartial") // Everything has the correct value in the partial

    <main class="content">
        @RenderBody() // Everything is null in that view
    </main>
</body>

Я пытался использовать ViewBag.Property, ViewData ["Property"], Page.Property и PageData ["Property"], но все они равны нулю в представлении, отображаемом RenderBody. Кажется, потому что Layout - последний скомпилированный элемент.

Я не хочу использовать какой-либо код. Все должно быть в поле зрения, сделать что-то похожее на мой пример выше. Это должно быть в макете, потому что значение, которым я хочу поделиться, определяется пользователем через CMS. Это означает, что этот макет используется статической страницей, а также представлениями, отображаемыми контроллером.

У меня такой вопрос: как я могу передать / поделиться данными из _Layout для моих представлений, представленных RenderBody ()?

Ответы [ 4 ]

0 голосов
/ 03 июля 2018

Да, вы можете использовать viewBag в вашем представлении partials. При вызове viewBag в бритвенном файле (.cahtml) Вы должны вернуть частичное представление для отображения.

0 голосов
/ 03 июля 2018

попробуйте это в вашем макете:

@ViewContext.Controller.ViewBag.Test= "test";
0 голосов
/ 03 июля 2018

Как я могу передавать / делиться данными с моими представлениями RenderBody ()?

Контроллеры отвечают за подготовку данных (модель, ViewBag, TempData и т. Д.) И их передачу в представления.

Вы также можете посмотреть фильтры для подготовки данных.


Вам необходимо заполнить свой ViewBag в контроллере:

public class HomeController
{
    public ActionResult Index()
    {
        // populate your ViewBag
        ViewBag.myValue = "some text";
    }
}

И тогда в вашем View / PartialView вы можете использовать его следующим образом:

MyPartialView.cshtml

<label>@ViewBag.myValue</label>
0 голосов
/ 03 июля 2018

ViewBag и ViewData зависят от вида, поэтому они очищаются всякий раз, когда вы нажимаете другой вид / действие. Попробуйте проверить эту ссылку http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications для получения дополнительной информации.

Попробуйте использовать TempData для этого эффекта - http://www.tutorialsteacher.com/mvc/tempdata-in-asp.net-mvc

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...