ASP.NET конвертировать UserControl в Razor Partial View: работа со свойством

Kerrek SB говорит, что это невозможно. Вместо этого вы можете использовать std::tuple

template <class ... Args>
void foo( std::tuple<Args...> t = std::tuple<int>(0) )
{}
-1
задан Camilo Terevinto 3 March 2019 в 16:06
поделиться

1 ответ

Ответ заключается в использовании ViewData со страницы для передачи данных в макет и его подвиды.

На странице

@page
@{
    ViewData["ActiveIndex"] = 2;
    ViewData["Title"] = "Books";
    ViewData["Description"] = "";
    ViewData["Keywords"] = "";
}

В Layout я затем отображаю заголовок следующим образом

<partial name="_Header" model='new _HeaderModel((int?)ViewData["ActiveIndex"])' />

Тогда заголовок может иметь строго типизированный параметр как часть своей модели и принять это от конструктора.

public class _HeaderModel : PageModel {
    public int? ActiveIndex { get; set; }

    public _HeaderModel() { }

    public _HeaderModel(int? activeIndex) {
        this.ActiveIndex = activeIndex;
    }
}

Добавлен вспомогательный метод

HtmlString ActiveTag(int index) => new HtmlString(index == ActiveIndex ? @"class=""active""" : "");

Затем эта старая строка

<li <%= ActiveIndex == 0 ? "class=\"active\"" : "" %>

превращается в

<li @ActiveTag(0)>

Для рефакторинга веб-форм в Razor Pages требуется немного работы, но всегда приводит к гораздо меньшему количеству кода:)

0
ответ дан Etienne Charland 3 March 2019 в 16:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: