ASP.Net MVC:下拉列表中未显示任何城市数据

本文关键字:显示 任何 城市 数据 Net MVC 下拉列表 ASP | 更新日期: 2023-09-27 18:29:55

我正在通过Webgrid显示数据。 Webgrid具有文本框和下拉列表,可显示每个学生的姓名,州,城市等。 我的代码有效,但为每个学生显示错误的选定城市。 为了便于测试,我手动填充了我的视图模型。 在这里,我正在粘贴我的代码。 如果可能的话,请看一下,让我知道显示错误城市的原因。 代码中要更改的内容。我的完整代码在这里

我的 dotnet 小提琴链接 https://dotnetfiddle.net/BrKBx1

请不要告诉我更改模型类设计代码。

视图模型和模型

public class MainViewModel
{
    public List<Student> Students { get; set; }
    public int SelectedState { get; set; }
    public int SelectedCity { get; set; }
}
public class Student
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int StateID { get; set; }
    public int CityID { get; set; }
    public List<States> States { get; set; }
    public List<Cities> Cities { get; set; }
}
public class States
{
    public int ID { get; set; }
    public string Name { get; set; }
}
public class Cities
{
    public int ID { get; set; }
    public string Name { get; set; }
    public int StateID { get; set; }
}

控制器

 public ActionResult Index()
        {
            MainViewModel oVm = new MainViewModel()
            {
                Students = new List<Student>() {
                        new Student
                        {
                            ID=1,
                            Name="JoyDev",
                            StateID=1,
                            CityID=1,
                            States=new List<States>()
                            {
                                new States
                                {
                                    ID=1,
                                    Name="WestBengal",
                                },
                                new States
                                {
                                    ID=2,
                                    Name="Bihar",
                                },
                                new States
                                {
                                    ID=3,
                                    Name="Orrisa",
                                }
                            },
                            Cities=new List<Cities>()
                            {
                                new Cities
                                {
                                    ID=1,
                                    Name="Alipur"
                                },
                                new Cities
                                {
                                    ID=2,
                                    Name="Asansol"
                                },
                                new Cities
                                {
                                    ID=3,
                                    Name="Andul"
                                }
                            }
                        },
    //***********
                        new Student
                        {
                            ID=2,
                            Name="Mukti",
                            StateID=2,
                            CityID=4,
                            States=new List<States>()
                            {
                                new States
                                {
                                    ID=1,
                                    Name="WestBengal",
                                },
                                new States
                                {
                                    ID=2,
                                    Name="Bihar",
                                },
                                new States
                                {
                                    ID=3,
                                    Name="Orrisa",
                                }
                            },
                            Cities=new List<Cities>()
                            {
                                new Cities
                                {
                                    ID=4,
                                    Name="Janpur"
                                },
                                new Cities
                                {
                                    ID=5,
                                    Name="Madhubani"
                                },
                                new Cities
                                {
                                    ID=6,
                                    Name="Kanti"
                                }
                            }
                        },
    //***********
                        new Student
                        {
                            ID=3,
                            Name="Somnath",
                            StateID=3,
                            CityID=9,
                            States=new List<States>()
                            {
                                new States
                                {
                                    ID=1,
                                    Name="WestBengal",
                                },
                                new States
                                {
                                    ID=2,
                                    Name="Bihar",
                                },
                                new States
                                {
                                    ID=3,
                                    Name="Orrisa",
                                }
                            },
                            Cities=new List<Cities>()
                            {
                                new Cities
                                {
                                    ID=7,
                                    Name="Chandapur"
                                },
                                new Cities
                                {
                                    ID=8,
                                    Name="Dhankauda"
                                },
                                new Cities
                                {
                                    ID=9,
                                    Name="Konarak"
                                }
                            }
                        }

                    }
            };
            return View(oVm);
        }

查看代码

@model  BuildTable.Models.MainViewModel
@{
    ViewBag.Title = "Test Grid";
}
@{
    WebGrid grid = new WebGrid(null);
    grid.Bind(Model.Students);
}
@grid.GetHtml(
        tableStyle: "webgrid-table",
        headerStyle: "webgrid-header",
        footerStyle: "webgrid-footer",
        alternatingRowStyle: "webgrid-alternating-row",
        selectedRowStyle: "webgrid-selected-row",
        rowStyle: "webgrid-row-style",
        mode: WebGridPagerModes.All,
        firstText: "<<",
        previousText: "<",
        nextText: ">",
        lastText: ">>",
        numericLinksCount: 5,
        columns:
            grid.Columns
            (
            grid.Column(columnName: "ID", header: "ID", format: @<text>@item.ID</text>,style:"SmallCols"),
            grid.Column(columnName: "FirstName", header: "First Name", format: @<text><input type="text" id="txtFirstName" value="@item.Name" class="edit-mode" /></text>,style:"NameColWidth" ),
            //grid.Column(columnName: "StateName", header: "State Name", format: @<text>@Html.DropDownListFor(x => x.SelectedState, new SelectList(Model.Students[1].States, "ID", "Name", Model.SelectedState = item.StateID), "-- Select States--", new { id = "cboState", @class = "edit-mode" })</text>,style:"NameColWidth"),
            grid.Column(columnName: "StateName", header: "State Name", format: @<text>@Html.DropDownListFor(x => x.SelectedState, new SelectList(Model.Students.SelectMany(x => x.States).Where(x => x.StateID == item.StateID), "ID", "Name", Model.SelectedState = item.StateID), "-- Select States--", new { id = "cboState", @class = "edit-mode" })</text>,style:"NameColWidth"),
            grid.Column(columnName: "CityName", header: "City Name", format: @<text>@Html.DropDownListFor(x => x.SelectedCity, new SelectList(Model.Students.SelectMany(x => x.Cities).Where(x => x.ID == item.StateID), "ID", "Name", Model.SelectedCity = item.CityID), "-- Select City--", new { id = "cboCity", @class = "edit-mode" })
            </text>,style:"NameColWidth")
            ))

我们不能这样过滤吗(Model.Students.SelectMany(x => x.Cities).Where(x => x.StateID == item.StateID)上面的代码返回每个 studen 的所有城市数据,我正在根据州 ID 过滤城市。 如果这不正确代码来做到这一点,然后建议我写什么来实现相同的目的。谢谢

ASP.Net MVC:下拉列表中未显示任何城市数据

您从未设置任何城市的StateID,因此如果您按 StateID == item.StateID 过滤,则永远不会有匹配项。

在控制器中,您需要这样的东西:

Cities = new List<Cities>()
{
    new Cities
    {
        ID = 4,
        StateID = 1, // add this!
        Name = "Janpur"
    },
    new Cities
    {
        ID = 5,
        StateID = 2, // add this!
        Name = "Madhubani"
    },
    new Cities
    {
        ID = 6,
        StateID = 3, // add this!
        Name = "Kanti"
    }
}

此外,我建议将SelectLists放入视图模型中,而不是在视图中创建它们。这将使您的代码更易于阅读,并且从概念上讲,SelectList实际上是一种支持视图的模型类型,而不是视图本身。


这是一个更新的小提琴:https://dotnetfiddle.net/UYpO9m

因为您的Where呼叫是在SelectMany之后进行的。在这一点上,你所拥有的只是一个Cities的集合,所以当你按x.ID == item.StateID过滤它时,你说只返回Cities.ID等于item.StateIDCities实例。根据测试数据,不执行任何操作,因此不会返回任何内容。通常情况下,您只需将Where调用移动到SelectMany调用之前,然后将表达式更改为x.StateID == item.StateID