非侵入式验证不适用于ViewComponent's

问题描述 投票:0回答:1

我正在使用ASP.NET Core v3.1实现表单。

我在Razor页面上有一个下拉代码,如下所示:

<div class="form-group">
    <label asp-for="MySelectedItem" class="m-b-none"></label>
    <help-text asp-for="MySelectedItem"></help-text>
    <div class="input-group">
        <select asp-for="MySelectedItem" asp-items="@Model.MyItems" class="form-control"></select>
        <partial name="_ValidationIcon" />
    </div>
    <span asp-validation-for="MySelectedItem" class="validation-message"></span>
</div>

在我的代码后面,我包含一个验证规则,以确保必须选择一个有效的选项。这样可以很好地呈现:

enter image description here

现在,我想将其通用化为ViewComponent,因此我不需要在下拉菜单中随时粘贴这些多余的代码。这是我的实现:

public class DropdownViewComponent : ViewComponent
{
    public IEnumerable<SelectListItem> Items { get; set; }

    public ModelExpression SelectedItem { get; set; }

    public async Task<IViewComponentResult> InvokeAsync(ModelExpression selectedItem, IEnumerable<SelectListItem> items)
    {
        Items = items;
        SelectedItem = selectedItem;
        return View(this);
    }
}

/ Dropdown / Default.cshtml

@model Web.ViewComponents.DropdownViewComponent

<div class="form-group">
    <label asp-for="SelectedItem" class="m-b-none"></label>
    <help-text asp-for="SelectedItem"></help-text>
    <div class="input-group">
        <select asp-for="SelectedItem" asp-items="@Model.Items" class="form-control"></select>
        <partial name="_ValidationIcon" />
    </div>
    <span asp-validation-for="SelectedItem" class="validation-message"></span>
</div>

用法:

<vc:dropdown selected-item="MySelectedItem" items="Model.MyItems"></vc:dropdown>

此代码呈现下拉列表,但是呈现的HTML中缺少验证属性。为什么?

enter image description here

我也不确定如何从传递给视图组件的模型表达式中获取DisplayName。

我哪里出错了?

谢谢

asp.net-core unobtrusive-validation
1个回答
0
投票

不幸的是,我不认为这很容易解决-and I've certainly tried!不过,我至少可以帮助解释why

© www.soinside.com 2019 - 2024. All rights reserved.