gpt4 book ai didi

asp.net - 为什么我的 DropDownList 只为第一个列表项输出错误的值?

转载 作者:行者123 更新时间:2023-12-04 18:13:07 25 4
gpt4 key购买 nike

我将数据上下文中的城市加载到两个不同的列表中,并将它们绑定(bind)到各自的 DropDownList 控件。
尽管两者的代码相同,只有数据和控件的名称不同,但数据绑定(bind)似乎仅对其中一个无法正常工作。它不显示城市名称,而是显示其 Id,即仅用于第一个选项!
我们有两个 DropDownList 控件:

  • DestinationDropDownList ;
  • OriginDropDownList .

  • 然后,我填充它们。
    public partial class MyControl : UserControl {
    protected void Page_Load(object sender, EventArgs e) {
    if (!IsPostBack) {
    var instruction = new City() {
    CityId = Guid.Empty,
    CityName = "- Select a city -"
    };

    var destinations = context.Cities.ToList();
    destinations = destinations.OrderBy(c => c.CityName).ToList();
    destinations.Insert(0, instruction);
    DestinationDropDownList.DataSource = destinations;
    DestinationDropDownList.DataTextField = "CityName";
    DestinationDropDownList.DataValueField = "CityId";
    DestinationDropDownList.DataBind();

    var origins = context.Cities.ToList();
    origins = origins.OrderBy(c => c.CityName).ToList();
    origins.Insert(0, instruction);
    OriginDropDownList.DataSource = origins;
    OriginDropDownList.DataTextField = "CityName";
    OriginDropDownList.DataValueField = "CityId";
    OriginDropDownList.DataBind();
    }
    }
    private static readonly MyDataContext context = new MyDataContext();
    }
    HTML:
    <asp:DropDownList ID="DestinationDropDownList" runat="server" />
    <asp:DropDownList ID="OriginDropDownList" runat="server" />
    显示的数据:
    *DestinationDropwDownList*
    - 0000-0000-0000-0000-0000 (empty Guid)
    - CityName 01
    - CityName 02
    - ...

    *OriginDropDownList*
    - - Select a city -
    - CityName 01
    - CityName 02
    - ...
    正确的显示是由 OriginDropDownList 渲染的。控制。为什么是 DestinationDropDownList没有正确显示数据,即列表中的第一个也是唯一的第一个项目?
  • 我尝试在插入指令之前删除第一项;
  • 我尝试插入指令两次,然后删除第一个;
  • 我尝试使用 DropDownList.Items.Add(string)方法,这与第一行一样没有显示,而是空的 Guid。

  • 我该如何纠正这种行为!?

    最佳答案

    我以前没有遇到过这个问题,但我会尝试回答你的第二个问题。我认为通过代码添加第一个“指导性”项目没有什么值(value)(如果我错了,请纠正我)。我宁愿将它直接添加到标记中:

    <asp:DropDownList ID="DestinationDropDownList" runat="server"
    AppendDataBoundItems="true"
    DataTextField="CityName"
    DataTextField="CityId">
    <asp:ListItem Text="- Select a city -" />
    </asp:DropDownList>
    由于使用了 AppendDataBoundItems ,第一项将在数据绑定(bind)中保留下来。属性。我还添加了 DataTextFieldDataValueField属性,您也可以从代码中删除这些属性。
    在数据绑定(bind)之前您可以做的另一件事是将实体投影到 ListItem实例:
    DestinationDropDownList.DataSource = 
    from d in destinations
    select new ListItem() {
    Text = d.CityName,
    Value = d.CityId.ToString()
    };
    DestinationDropDownList.DataBind();
    这样,您不必设置 DataTextFieldDataValueField控件上的属性,因为您已经在自己创建列表的项目。

    关于asp.net - 为什么我的 DropDownList 只为第一个列表项输出错误的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9008333/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com