У нас есть основная форма с некоторыми основными входами и частичным представлением, отображаемым в диалоговом окне Boostrap Modal:
@model CreateDonutVm
@{
ViewData["Title"] = "Create Donut";
}
<div id="homer-search-modal" class="modal" role="dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content" id="homerSearchModalContent">
@await Html.PartialAsync("_SearchHomer.cshtml", Model.HomerSearch)
</div>
</div>
</div>
<form asp-controller="Donuts" asp-action="Create">
<fieldset class="with-legend">
<legend>Donut Details</legend>
<div class="form-row align-items-center">
@Html.LabelFor(m => m.Donut.BoughtBy, "", new {@class = "col-sm-1 col-form-label-sm"})
<div class="col-sm-2">
@Html.TextBoxFor(m => m.Donut.BoughtBy, "", new {@class = "form-control form-control-sm"})
</div>
</div>
</fieldset>
<div class="clearfix">
@if (!ViewData.ModelState.IsValid)
{
<div class="alert alert-danger" role="alert">
@Html.ValidationSummary(false, "Donut Creation failed. Please correct these errors:")
</div>
}
<button type="submit" class="btn btn-primary float-right">Save</button>
</div>
</form>
Модели:
public class CreateDonutVm
{
public CreateDonutVm()
{
HomerSearch = new HomerSearchVm();
}
public HomerSearchVm HomerSearch { get; set; }
public DonutDto Donut { get; set; }
}
public class DonutDto
{
[Required]
public string BoughtBy { get; set; }
}
public class HomerSearchVm
{
[Required]
public string SearchTerm { get; set; }
}
Как видите, частичному представлению нужна своя модель, содержащая поисковый термин, который пользователь заполняет и затем отправляет обратно контроллеру для поиска списка сущностей. В частичном представлении пользователь выбирает желаемый объект. Идентификатор и имя объекта затем возвращаются в форму на главной странице.
Когда пользователь нажимает кнопку «Сохранить» в главной форме, мы не хотим, чтобы сообщения проверки выводились из частичного представления (эти ошибки обрабатываются в модальной форме).
Я посмотрел повсюду, но не могу найти пример, чтобы кто-то достиг этого.
Первоначально я предполагал, что, поскольку частичное представление отображается вне формы, содержащей элемент управления ValidationSummary, тогда MVC не будет оценивать состояние элементов управления в партиалах.
Однако, глядя на ModelState после отправки основной формы, MVC оценивает элементы управления частичным представлением и помещает ошибки в коллекцию ModelState.Errors для этих элементов управления частичным представлением.
Есть ли способ заставить MVC оценивать элементы управления только в основной форме и игнорировать их в частичных представлениях?