如何在 cshtml 页面的 FOR 循环中包含多个 SELECT 元素

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

如果我有一个

.cshtml
文件并且有一个
FOR
循环如

for (var i = 0; i < Model.Contacts.Count; i++)

我怎么在里面有一个

SELECT
列表,我怎么设置不同的
SELECTED

    Titles = new List<SelectListItem>
    {
        new SelectListItem{ Value = "Mr", Text = "Mr"},
        new SelectListItem{ Value = "Mrs", Text = "Mrs"},
        new SelectListItem{ Value = "Miss", Text = "Miss"},
        new SelectListItem{ Value = "Dr", Text = "Dr"}
    };

    newContact.ContactId = 1;
    newContact.Title = "Mr";
    newContact.Email = "mail@mail";
    newContact.HireDate= DateTime.Now.Date.ToString("yyyy-MM-dd");


    @for (var i = 0; i < Model.Contacts.Count; i++)
    {
       <select name="[@i].Title" asp-items="Model.Titles"></select>

asp.net-core razor model razor-pages
2个回答
0
投票

为您的 asp 项目使用带有

(IEnumerable items, object selectedValue)
参数的新 SelectList 类,如下所示:

<select name="[@i].Title" asp-items="@(new SelectList(Model.Titles, Model.Title))"></select>

0
投票

因为下拉列表的值对于每个联系人都是相同的,所以我认为在每个联系人中包含

List<SelectListItem>
不是一个好主意。我写了一个简单的演示来展示我的想法,希望它能给你一些帮助。

型号

public class People
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Title { get; set; }

    }

控制器

List<SelectListItem> selectListItems = new List<SelectListItem>()
        {
           new SelectListItem{ Value = "Mr", Text = "Mr"},
            new SelectListItem{ Value = "Mrs", Text = "Mrs"},
            new SelectListItem{ Value = "Miss", Text = "Miss"},
            new SelectListItem{ Value = "Dr", Text = "Dr"}
        };

        //For testing, I just hard code here
        List<People> people = new List<People>()
        {
            new People()
            {
                FirstName = "Bob",
                LastName = "Smith",
                Title = "Mr",
            },
            new People()
            {
                FirstName = "Sam",
                LastName = "Perry",
                Title = "Mrs"
            },
            new People()
            {
                FirstName = "Jack",
                LastName = "Jones",
                Title = "Dr"
            }
        };

        public IActionResult Index()
        {
            ViewBag.select = selectListItems;
            return View(people);
        }

查看

@model List<People>

<form method="post">
    @for (var i = 0; i < Model.Count; i++)
    {
        <div class="form-group">
            <label asp-for="@Model[i].FirstName" class="control-label"></label>
            <input asp-for="@Model[i].FirstName" class="form-control" />
            <span asp-validation-for="@Model[i].FirstName" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="@Model[i].LastName" class="control-label"></label>
            <input asp-for="@Model[i].LastName" class="form-control" />
            <span asp-validation-for="@Model[i].LastName" class="text-danger"></span>
        </div>
        <div class="form-group">
            <label asp-for="@Model[i].Title" class="control-label"></label>
            <select asp-for="@Model[i].Title" asp-items="@ViewBag.select" class="form-control"></select>
            <span asp-validation-for="@Model[i].Title" class="text-danger"></span>
        </div>

    }

    <button type="submit">Save</button>
</form>

演示

从上图中,每个联系人都会根据其标题的值选择默认值。

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