Я пытался поэкспериментировать с компонентами представления в ASP.NET Core, чтобы создать систему, основанную на «виджетах».В настоящее время у меня есть контактная форма, которая открывает модальное диалоговое окно и отображает компонент вида на основе сделанного ими выбора.Для простоты я вызываю viewcomponent следующим образом со своей страницы макета (да, я не использую vc: Convention atm):
@await Component.InvokeAsync("Inquiry")
Затем он вызовет форму запроса через:
public class InquiryViewComponent : ViewComponent
{
private readonly ILogger<InquiryViewComponent> _logger;
private readonly IServiceRepository _serviceRepository;
public InquiryViewComponent(ILogger<InquiryViewComponent> logger, IServiceRepository serviceRepository)
{
_logger = logger;
_serviceRepository = serviceRepository;
}
public async Task<IViewComponentResult> InvokeAsync()
{
// do stuff here like create a backing model and then return the view
return await Task.FromResult(View("~/Views/Inquiry/Inquiry.cshtml", _viewModel));
}
}
Все загружается правильно, и открывается модальное диалоговое окно (есть скрипт для вызова модального при открытии) со следующим:
@model InquiryViewModel
//modal initialization here
//modal header here
@using (Html.BeginForm("Inquiry", "Inquiry"))
{
<div class="modal-body">
<div class="container">
<div class="row mb-2">
<div class="col-md-6">
@Html.LabelFor(m => m.Inquire.FirstName, new { @class = "required" })
@Html.TextBoxFor(m => m.Inquire.FirstName, new { @class="form-control", autocomplete="given-name", required="required" })
</div>
<div class="col-md-6">
@Html.LabelFor(m => m.Inquire.LastName, new { @class = "required" })
@Html.TextBoxFor(m => m.Inquire.LastName, new { @class = "form-control", autocomplete = "family-name", required = "required" })
</div>
</div>
//OTHER FIELDS HERE
</div>
//FOOTER
}
Как только пользователь отправляет, если модель недействительна, онаотправляет назад к представлению Запрос, который я не хочу.Я понимаю, что он пытается вернуть страницу в форме (я вижу, где это происходит).Я также понимаю, что могу использовать проверку на стороне клиента, но я стремлюсь создавать более сложные виджеты и не хочу иметь кучу кода JavaScript.Что я хочу знать: если у меня есть компонент представления на основе формы, и он нуждается в проверке модели с сервера, могу ли он вернуть результат БЕЗ рендеринга страницы?Является ли эта реализация просто совершенно неверной для компонентов представления и какие другие способы более подходят?