Я использую View View для создания части MVC Page. Компонент View попадает в базу данных и создает таблицу результатов, если запрос дает результаты. Запрос, выдающий результаты, означает, что есть проблема, поэтому я настроил компонент представления так, чтобы он отображался только при наличии результатов. Этот запрос также предназначен для повторного использования в разных частях сайта, поскольку его результаты могут влиять на несколько страниц.
Прекрасно работает для отображения ошибки только в случае ее возникновения!
Однако на главной странице есть обработчик формы для отправки сообщения электронной почты, и я хочу отключить эту возможность, когда данные недействительны. Я использую ViewData.ModelState.IsValid
, чтобы проверить, является ли модель действительной или нет. Однако, поскольку мой Компонент указывает, являются ли данные действительными, я столкнулся с проблемой!
Я не знаю, как проверить, заполнен ли компонент или нет, без какого-либо жесткого кодирования его обратно в оригинальная страница. Кажется, я не могу передать данные представления из Компонента на вызывающую страницу (хотя другое направление отлично работает), я даже не могу подписать страницу на событие, потому что не вижу способа связать экземпляр Компонента со страницей!
Мне не нужно проверять содержимое компонента перед тем, как сделать страницу недействительной, мне просто нужно знать, произвел ли компонент что-либо вообще.
Может кто-нибудь помочь мне сделать это ?
Вот код для компонента:
namespace Reports.Shared.Validation
{
public class IdentifierValidationViewComponent : ViewComponent
{
private readonly IdentifierValidationDB _IdentifierValidationContext;
public IdentifierValidationViewComponent(IdentifierValidationDB IdentifierValidationContext)
{
_IdentifierValidationContext = IdentifierValidationContext;
}
public List<IdentifierValidation> InvalidIdentifiers { get; set; }
public async Task<IViewComponentResult> InvokeAsync(string date)
{
InvalidIdentifiers = await _IdentifierValidationContext.IdentifierValidations.FromSqlRaw("EXEC Reports.IdentifierValidation {0}", date).ToListAsync();
return View(InvalidIdentifiers);
}
}
}
Вот частичное представление, которое визуализирует компонент:
@model List<Reports.Models.Shared.Validation.IdentifierValidation>
@if (Model.Count() > 0)
{
<div id="InvalidIdentifiers" class="alert-danger">
<h2>Values are missing Identifiers!</h2>
<ul>
@foreach (var invalid in Model)
{
<li>
@invalid.SecName has no Identifier.
</li>
}
</ul>
</div>
}
Наконец, я вызываю компонент на главной странице с этой строкой
@await Component.InvokeAsync("IdentifierValidation", new { date = Model.Date })
Все, что я хочу сделать, - это проверить на главной странице, действительно ли компонент производит HTML или нет, а затем аннулировать ViewData.ModelState.IsValid
, если это так.