【问题标题】:How to display combobox in a table?RSS如何在表格中显示组合框?RSS
【发布时间】:2020-05-24 22:14:20
【问题描述】:
  1. 如何在表格中显示当前模型的组合框?
  2. 如何正确制作模型以便在表格中显示组合框?

目前,我得到了结果,如图所示。

ASP.NET Core 3.1

问题:
- 在带有组合框的字段中,不显示用于记录的字段的当前值。

Company.cs

public class Company
    {
        public int Id { get; set; }

        public string Picture { get; set; }
        public string Name { get; set; }
        public string Description{ get; set; }
        public bool Status { get; set; }        

         public Status2 Status2Value { get; set; }     

        public class Status2
        {
            public int ID { get; set; }
            public string Status { get; set; }
        }
    }

HomeController.cs

public class HomeController : Controller
    {
        public IActionResult Index()
        {            
            List<Company> companies_List = new List<Company>();  
            companies_List = MockCompanyData.CompanyList_prop;

            List<Company.Status2> status2_List = new List<Company.Status2>();
            status2_List = MockCompanyData.CompanyStatus2_prop;

            IndexVM indexVM = new IndexVM { Companies = companies_List, companyStatus2 = status2_List };

            return View(indexVM);

        }

    }

IndexVM.cs

 public class IndexVM
    {
        public IEnumerable<Company> Companies { get; set; }
        public IEnumerable<Company.Status2> companyStatus2 { get; set; }  

    }

MockCompanyData.cs

static class MockCompanyData
    {        
        static string mainPathForImg = @"";

        static List<Company.Status2> companyStatus2List = new List<Company.Status2>
        {
            new Company.Status2 {ID=1, Status = ""},
            new Company.Status2 {ID=2, Status = "Yes"},
            new Company.Status2 {ID=3, Status = "No"}
        };

        static List<Company> companyList = new List<Company>
        {
            new Company {Id = 1, Picture = mainPathForImg + @"~/img/number_1_blue.png", Name ="Name_Company_1", Description ="Description_1", Status = true, Status2Value = companyStatus2List[0]},
            new Company {Id = 2, Picture = mainPathForImg + @"~/img/number_2_blue.png", Name ="Name_Company_2", Description ="Description_2", Status = false, Status2Value = companyStatus2List[1]},
            new Company {Id = 3, Picture = mainPathForImg + @"~/img/number_3_blue.png", Name ="Name_Company_3", Description ="Description_3", Status = true, Status2Value =companyStatus2List[0]}           
        };

        public static List<Company> CompanyList_prop
        {
            get
            {
                return companyList;
            }
            set
            {
                companyList = value;
            }
        }

        public static List<Company.Status2> CompanyStatus2_prop
        {
            get
            {
                return companyStatus2List;
            }
            set
            {
                companyStatus2List = value;
            }
        }

    }

Index.cshtml

   @using WebApplCore.Core.ViewModels;
@using WebApplCore.Models;

@model IndexVM;

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

<head>
    <link href="~/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
</head>

<body>
    <div class="container">        
        <table class="table table-sm table-hover table-striped">
            <thead class="thead-dark">                
                @{var headerMetadata = Model.Companies.FirstOrDefault();}
                <tr>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Id)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Picture)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Name)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Description)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Status)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Status2Value)
                    </th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @foreach (Company item in Model.Companies)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.Id)
                            @*@item.Id*@
                        </td>
                        <td>                            
                            <img src=@Html.DisplayFor(modelItem => item.Picture) class="rounded-circle" asp-append-version="true" alt="No Picture">
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.Name)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.Description)
                        </td>
                        <td>
                            <input type="checkbox" value=@Html.DisplayFor(modelItem => item.Status)>                            
                        </td>
                        <td>
                            <select name="companyId" class="form-control">
                                @foreach (Company.Status2 status2 in Model.companyStatus2)
                                {
                                    <option value="@status2.ID">@Html.DisplayFor(modelItem => status2.Status)</option>
                                }
                            </select>

                        </td>
                        <td>
                            <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
                            <a asp-action="Details" asp-route-id="@item.Id">Details</a> |
                            <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
                        </td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
</body>

图片1

图二

【问题讨论】:

  • 什么问题?组合框渲染成功
  • @Always_a_learner 问题:当前记录的Status字段的值不显示。 示例: 1. 对于带有id = 1 的记录,字段Status = true。该表显示一个空字段。 Status = empty2. 对于带有id = 2 的记录,字段Status = false。该表显示一个空字段。 Status = empty。如果我无法回答您的问题,请告诉我。
  • 试着理解,检查我的答案,如果我估计不正确,请告诉我
  • @Always_a_learner @Always_a_learner 在过去的cmets中,我弄错了。会更正确。 问题:当前记录的Status2Value 字段的值不显示。 示例: 1 对于使用id = 1 进行录制,该字段为Status2Value = yes。该表显示一个空字段。 Status2Value = empty2. 对于使用id = 2 进行录制,该字段为Status2Value = No。该表显示一个空字段。 Status = empty。如果我无法回答您的问题,请告诉我。 ——
  • 您想在第一行的 status2Value 字段中看到 Yes,在第二行的 Status2Value 中看到 No?

标签: asp.net asp.net-core


【解决方案1】:

据我了解,您想设置下拉值:这是您代码中的更改:

型号:

public class Company
{
    public int Id { get; set; }

    public string Picture { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public bool Status { get; set; }

    public int SelectedStatus2Value { get; set; }

    public class Status2
    {
        public int ID { get; set; }
        public string Status { get; set; }
    }
}

static class MockCompanyData
{
    static string mainPathForImg = @"";

    static List<Company.Status2> companyStatus2List = new List<Company.Status2>
    {
        new Company.Status2 {ID=1, Status = ""},
        new Company.Status2 {ID=2, Status = "Yes"},
        new Company.Status2 {ID=3, Status = "No"}
    };

    static List<Company> companyList = new List<Company>
    {
        new Company {Id = 1, Picture = mainPathForImg + @"~/img/number_1_blue.png", Name ="Name_Company_1", Description ="Description_1", Status = true, SelectedStatus2Value = companyStatus2List[1].ID},
        new Company {Id = 2, Picture = mainPathForImg + @"~/img/number_2_blue.png", Name ="Name_Company_2", Description ="Description_2", Status = false, SelectedStatus2Value = companyStatus2List[2].ID},
        new Company {Id = 3, Picture = mainPathForImg + @"~/img/number_3_blue.png", Name ="Name_Company_3", Description ="Description_3", Status = true, SelectedStatus2Value =companyStatus2List[2].ID}
    };

    public static List<Company> CompanyList_prop
    {
        get
        {
            return companyList;
        }
        set
        {
            companyList = value;
        }
    }

    public static List<Company.Status2> CompanyStatus2_prop
    {
        get
        {
            return companyStatus2List;
        }
        set
        {
            companyStatus2List = value;
        }
    }

查看:

@using WebApplCore.Core.ViewModels;
@using WebApplCore.Models;

@model IndexVM;

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

<head>
    <link href="~/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
</head>

<body>
    <div class="container">
        <table class="table table-sm table-hover table-striped">
            <thead class="thead-dark">
                @{var headerMetadata = Model.Companies.FirstOrDefault();}
                <tr>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Id)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Picture)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Name)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Description)
                    </th>
                    <th>
                        @Html.DisplayNameFor(model => headerMetadata.Status)
                    </th>
                    <th>
                        Status2Value
                    </th>
                    <th></th>
                </tr>
            </thead>
            <tbody>
                @foreach (Company item in Model.Companies)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.Id)
                            @*@item.Id*@
                        </td>
                        <td>
                            <img src=@Html.DisplayFor(modelItem => item.Picture) class="rounded-circle" asp-append-version="true" alt="No Picture">
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.Name)
                        </td>
                        <td>
                            @Html.DisplayFor(modelItem => item.Description)
                        </td>
                        <td>
                            <input type="checkbox" value=@Html.DisplayFor(modelItem => item.Status)>
                        </td>
                        <td>
                            <select name="companyId" class="form-control">
                                @foreach (Company.Status2 status2 in Model.companyStatus2)
                                {
                                    if (status2.ID != item.SelectedStatus2Value)
                                    {
                                        <option value="@status2.ID">@Html.DisplayFor(modelItem => status2.Status)</option>
                                    }
                                    if (status2.ID == item.SelectedStatus2Value)
                                    {
                                        <option selected value="@status2.ID">@Html.DisplayFor(modelItem => status2.Status)</option>
                                    }
                                }
                            </select>

                        </td>
                        <td>
                            <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> |
                            <a asp-action="Details" asp-route-id="@item.Id">Details</a> |
                            <a asp-action="Delete" asp-route-id="@item.Id">Delete</a>
                        </td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
</body>

在这里输出:

【讨论】:

  • 在哪里放置class Status2class Status2 嵌入`class Company` 还是让它成为一个单独的类更好?如果我使用数据库,类class Status2 是否应该存储在单独的表中?还是没有原则性的解决方案?任务:我需要一个目录作为“SelectedStatus2Value”字段的组合框的数据源。
  • 你应该让它成为一个单独的类。
猜你喜欢
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 2012-07-10
  • 1970-01-01
  • 1970-01-01
  • 2011-07-01
相关资源
最近更新 更多