MVC Core 2.0 HTML.Action vs Component.InvokeAsync - PullRequest
0 голосов
/ 06 июня 2018

Я действительно изо всех сил пытаюсь изменить свое мышление с @html.Action способа делать вещи на этот новый Component.Invoke образ жизни.

Итакобрисовать в общих чертах мою структуру.У меня есть Контроллер с именем " Контракт " со стандартным Индексом IActionResult .

Там у меня есть частичное представление, которое представляет собой форму, которую я обычно имел бытолько что загруженный из index.cshtml с использованием следующего:

if(Something = my value){
 @Html.Action("p_NewContract", new { id = x })
}

, который всегда работал.

Для того, что я могу читать, мне теперь нужно создать новую папкувне моего хорошо структурированного представления и частичного представления папок под каждым Контроллером.Папка, которую я ЕСТЬ для создания: "Shared / Components / p_NewContract.cshtml"

И затем в этой папке мне нужно создать файл .cs спостфикс ViewComponent ( p_NewContractViewComponent.cs ) И каким-то образом среда выполнения узнает, что эти две вещи принадлежат друг другу?

В этом файле CS я добавляю [ViewComponent(Name = "p_NewContract")] перед общедоступным классом, а затем после всехчто я могу добавить к своему Index.cshtml

@await Component.InvokeAsync("p_NewContract", new { id= 2})

Я сделал все это, никаких признаков того, что он работает.Я что-то упустил, есть ли способ вернуть мой старый Html.Action?Это было намного проще.

Любая помощь, которая поможет мне расстроиться, будет великолепной!

Caz

1 Ответ

0 голосов
/ 06 июня 2018

В компоненте представления есть две части: ваш класс, производный от ViewComponent, и представление, которое должен возвращать компонент.По соглашению ваши классы компонентов представления фактически переходят в /ViewComponents, в то время как опять-таки по соглашению ваше представление переходит в Views/Shared/Components/{component name}/Default.cshtml.

Хотя это просто соглашение.Так же, как Razor автоматически находит представления на основе имени контроллера / действия.По правде говоря, занятия могут проходить где угодно.Они вводятся с помощью отражения, поэтому, пока он находится где-то в сборке или в сборке, на которую ссылаются, он будет найден.Точно так же представления можно перемещать куда угодно, нужно просто указать, где их искать, поскольку они больше не смогут делать это автоматически на основе соглашения.Смотри: https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-components#view-search-path

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