У меня есть меню и область содержимого, в которой отображается содержимое на основе выбранного элемента в меню.Поскольку пользователю разрешено изменять структуру главного меню, я решил, что все будет на странице / home / index и будет назначен указатель на контент, который необходимо показать.Я начал с идеи представления частичных представлений, но понял, что в ASP.NET Core больше нет RenderAction и его заменили ViewComponents.Поэтому я использовал ViewComponents, и все работает нормально, за исключением того, что я наткнулся на ситуацию, когда мне нужно иметь компонент в качестве формы отправки.
В примере: один элемент меню - это компонент, которыйпоказывает список пользователей.Другой пункт меню - это компонент, который создает нового пользователя.При создании пользовательского компонента у меня будет форма, которую нужно заполнить, а при успешной отправке я хочу перенаправить пользователя на компонент, который показывает список пользователей.В случае неудачной отправки, ошибки, неправильного ввода я, конечно, не хотел бы перенаправлять пользователя в список пользователей.
Поскольку работа ViewComponents заключается в отображении представления, как мне следует подойти к этой проблеме?Я ищу указатели в правильном направлении.У меня мало опыта в этой области, поэтому любая помощь будет оценена.
ОБНОВЛЕНИЕ
In Index.cshtml :
<tbody>
@foreach (string item in Model.Components)
{
<tr>
<td>
<div class="col-md-3">
@await Component.InvokeAsync(@item)
</div>
</td>
</tr>
}
</tbody>
Это внутри области содержимого. Компоненты - это строковые имена компонентов, которые я хотел бы отобразить в области содержимого (в настоящее время перечислены один за другим).
Мой ViewComponent, который будет вызываться при нажатии на элемент менюдля отображения формы:
public class TestFormViewComponent : ViewComponent
{
public async Task<IViewComponentResult> InvokeAsync()
{
return View("_TestForm", new TestModelPost());
}
}
Мой _TestForm.cshtml компонент:
@model TestModelPost
<form asp-controller="Home" asp-action="TestPost" method="post">
<label asp-for="Name"></label>
<input asp-for="Name" /><br />
<label asp-for="Surname"></label>
<input asp-for="Surname" /><br />
<button type="submit">Go</button>
</form>
И действие TestPost вызвано:
[HttpPost]
public IActionResult TestPost(TestModelPost model)
{
// Save model data, etc
// !ModelState.IsValid -> go back to form
// Success -> go to specific id
return RedirectToAction("Index", new { id = 1 });
}
Как мне подойти к этому?Или, скорее, я даже на правильном пути?Я не уверен, как мне вернуться "назад" к тому представлению, которое я создал в моем компоненте _TestForm, если ввод был неправильным.