【发布时间】:2020-01-30 22:47:34
【问题描述】:
我正在使用视图组件来创建 MVC 页面的一部分。 View 组件进入数据库,如果查询产生结果,则产生结果表。产生结果的查询意味着存在问题,因此我将视图组件设置为仅在有结果时显示。该查询也可以在网站的不同部分重复使用,因为它的结果可能会影响多个页面。
非常适合仅在出现问题时才显示错误!
但是,主页有一个用于发送电子邮件的表单处理程序,我想在数据无效时禁用该功能。我使用ViewData.ModelState.IsValid 来检查模型是否有效。但是,由于我的 Component 指示数据是否有效,所以我遇到了问题!
我不知道如何检查组件是否已填充,而不是以某种方式将其硬编码回原始页面。我似乎无法将视图数据从 Component 传递到调用页面(尽管另一个方向效果很好),我什至无法将页面订阅到事件,因为我看不到将 Component 实例与页面关联的方法!
我不需要在使页面失效之前检查组件的内容,我只需要知道组件是否产生了任何东西。
谁能帮我做这个?
这是组件的代码:
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 无效。
【问题讨论】:
标签: c# asp.net-mvc asp.net-core asp.net-core-3.0