【问题标题】:<select> tag helper not marking options as "selected" in multiple select<select> 标签助手未在多项选择中将选项标记为“已选择”
【发布时间】:2020-02-20 23:13:13
【问题描述】:

采取以下模型:

public class SomeModel
{
    public ICollection<Tag> Tags { get; set; }
}

public class Tag
{
    public int Id { get; set; }
    public string Value { get; set; }
}

模型是某种对象(例如,博客条目),具有标签或关键字列表。

我有一个 Razor 视图,其中显示了一个用于编辑 SomeModel 对象的表单:

@model SomeModel
@{
    // List of available tags is passed by controller
    var tags = (List<Tag>)ViewData["Tags"];
}
<label asp-for="Tags">Tags</label>
<select asp-for="Tags"
        asp-items="@(new SelectList(tags, nameof(Tag.Id), nameof(Tag.Value)))">
</select>

正如预期的那样,这会生成一个显示可用标签的多选:

<label for="Tags">Tags</label>
<select class="input-validation-error"
        data-val="true" data-val-required="The Tags field is required."
        id="Tags" multiple="multiple" name="Tags">
    <option value="1">tag1</option>
    <option value="2">tag2</option>
</select>

@Model.Tags 正确包含当前分配的标签;但是,对应的选项没有标记为selected

如何解决此问题?

【问题讨论】:

    标签: c# asp.net-core razor html-select tag-helpers


    【解决方案1】:

    您需要创建一个属性来传递选定的数据并将其绑定到选择标记的asp-for 属性。

    索引.cshtml.cs:

    public class IndexModel : PageModel
    {
        [BindProperty]
        public List<int> SelectedTags { get; set; } =  new List<int>{  2, 3 };
        [BindProperty]
        public List<Tag> Tags { get; set; }
        public void OnGet()
        {
            Tags = new List<Tag> {
        new Tag { Id = 1, Value="Mike" },
        new Tag { Id = 2, Value="Pete" },
        new Tag { Id = 3, Value="Katy" },
        new Tag { Id = 4, Value="Carl" } };
    
        }
    }
    

    索引.cshtml:

    @page
    @model WebApplication1_rzaor_page.IndexModel
    @{
        ViewData["Title"] = "SelectTag";
        Layout = "~/Pages/Shared/_Layout.cshtml";
    }
    
    <h1>SelectTag</h1>
    
    <label asp-for="Tags">Tags</label>
    <select asp-for="SelectedTags"
            asp-items="@(new SelectList(Model.Tags, "Id","Value"))">
    </select>

    Result of this demo

    你可以参考这个链接:Setting Selected Item

    【讨论】:

    • 所以你的意思是我必须创建一个单独的标签ID列表,而不是直接传递List&lt;Tag&gt;?我想知道为什么 ASP.NET 不自己执行此操作,因为无论如何我都指定了相应的成员 (Id)。
    • SelectListItem 是绑定选择标签的默认类型。绑定不同类型时,需要指定字段对应SelectListItem的text和value字段。你可以看看这个链接:docs.microsoft.com/en-us/dotnet/api/…
    猜你喜欢
    • 1970-01-01
    • 2020-07-29
    • 2012-12-12
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多