из PartialView в ASP.NET MVC 4.8?
Стоит задача сделать компонент, часть которого на разных страницах выглядит по-разному. В blazor такое легко решается через композицию (RenderFragment), где в конкретное место компонента можно подкинуть динамику в виде компонентов и похожим образом работает BeginForm/EndForm с отдельным рендером. Вот хотелось бы получить схожее поведение.
Есть идеи куда можно посмотреть?
По правде сказать, я не совсем понял задачу.
Есть header на странице с кнопками и т.п. И на разных страницах в этот header дорисовывается кастомный контент в виде других кнопок (фильтр, поиск и т.п.). Вот хочется получить что-то типа Page1: <CustomHeader><div1/><CustomHeader/> Page2: <CustomHeader><div2></CustomHeader>
В зависимости от масштабов, если изменения в хедере масштабные, можно Layout менять, если хедер меняется частично, можно из PartialView собирать.
header меняется частично. Просто в PartialView мы можем передавать модель и параметры, но разметка будет в строке. Это норма в MVC или есть более читамый способ?
Возможно я не верно понимаю, что значит разметка в строке?
Грубо говоря @Html.Partial(“Header”, “<div><button/></div>”) меня немного смущает. Разметка в строке, переданная вторым параметром
Так разметка же будет в PartialView
А его уже можно встроить в существующую разметку
Разметка Header общая и вынесена в PartialView. Нужно добавить кастомные кнопки, которые на каждой странице разные, в какую-то часть в Header разметке. Чтобы отрисовать Header мы вызывам @Html.Partial(“Header”), где параметром передам разметку с кнопками, которую нужно внедрить. Меня конкретно смущает, что мы передаем разметку кнопок в виде строки. А что если я захочу встроить PartialView в PartialView? Есть ли способ как-то нормально передать разметку, которую нужно внедрить в разметку Header? Примеры я описывал выше
Передавать разметку не нужно, если структура хедера не меняется, нужно просто создать PartialView c разной разметкой и комбинировать их. Вот, например PartialView поиска, если нужно отобразить его иначе, обычно просто создают новое, с новой разметкой. Либо динамически меняют на фронте при помощи JS.
Немного не так: структура хедера должна поменяться как раз за счет добавления кнопок. CustomHeader.csthml <header class=“header”> <nav>…</nav> <h5>@Model.Title</h5> <div class=“buttons”>{dynamic content here}</div> </header> Page1: @Html.Partial(“CustomHeader”, “<div><button class=“search”/></div>”) Page2: @Html.Partial(“CustomHeader”, “<div><button class=“filter”/></div>”)
Соответственно в этом примере в div.buttons мы должны подменять контент внутри из родительской view
А что мешает сделать так, например? CustomHeader.csthml <header class=“header”> <nav>…</nav> <h5>@Model.Title</h5> <div>@Html.Partial(“Dunamic”, ...) </div> </header> Только, вместо основного PartialView сделать, Layout и пихать в его готовую разметку элементы. Например классический пример динамического отображения логина, текущего пользователя и поисковой строки в навбаре. Навбар один и тот же, но выглядит иначе на разных страницах, либо в зависимости от того залогинен юзверь или нет.
Ок, спасибо. Появились идеи для теста
Обсуждают сегодня