【问题标题】:Bind Dropdown with hardcoded values使用硬编码值绑定下拉菜单
【发布时间】:2012-02-06 20:06:10
【问题描述】:

我有一个包含硬编码值的下拉列表:

<asp:DropDownList ID="BulletinTypeDropDown" runat="server">
    <asp:ListItem Selected="True" Text="--Select--" Value="--Select--"></asp:ListItem>
    <asp:ListItem Text="News" Value="News"></asp:ListItem>
    <asp:ListItem Text="report" Value="report"></asp:ListItem>
    <asp:ListItem Text="System" Value="System"></asp:ListItem>
    <asp:ListItem Text="Reminder" Value="Reminder"></asp:ListItem>
</asp:DropDownList>

我想用它来插入和编辑数据库中的值。例如,当添加记录时,用户选择“报告”,“报告”被插入到数据库中。然后,如果用户去编辑页面,因为数据库中的值是“报告”,那么下拉列表必须显示“报告”被选中。 但我能够成功地将值存储在数据库中,但在编辑页面期间我无法检索所选页面。 我正在使用实体框架,所以我厌倦了很多方法,但无法在编辑页面中获得价值。 这是我尝试的方式。

DropDown.SelectedValue = bulList.intype.ToString();//intype 是我从 DB 获取的值,它返回当前值,但在 DropDown.selectedvalue 中传递 null。

有人可以帮助我获取下拉列表中的值的其他方法吗?

谢谢

【问题讨论】:

  • 您尝试在页面生命周期中的哪个事件处理程序中设置下拉列表值(Page_load、Button_click)?编辑页面如何接收值?显示更多代码会更容易。
  • 我正在尝试在 page_load 显示下拉列表。我刚刚对这些值进行了硬编码,并且在下拉列表和后面的代码中我厌倦了我只是在做如下,if (bulletinList.Bulletintype != null) { BulletinTypeDropDown.SelectedValue = bulletinList.Bulletintype;}
  • 何时设置从数据库读取的值?也许您的下拉菜单在设置 SelectedValue 时还没有硬编码的 Items?在设置 SelectedValue 的行上打断并检查 Items.Length。
  • 当您使用调试器点击 Page_load 时,您是否看到 bulList.intype 确实设置为您期望的值?
  • 是的,我在 bulList.intype 中看到了值,但在 dropdownlist 中没有。Drodownlist 始终显示默认值。

标签: c# asp.net drop-down-menu bind


【解决方案1】:

您必须在下拉列表中找到文本并将 selected 属性设置为 true 示例:

//pass the string you want to set selected to true --> assuming in your case bulList.intype.ToString()
BulletinTypeDropDown.Items.FindByText(bulList.intype.ToString()).Selected = true;

您也可以使用 FindByValue 进行类似操作。更多信息在这里:http://forums.asp.net/t/1004541.aspx/1

【讨论】:

  • 我什至试过这个,但它抛出一个错误,说..对象引用未设置为对象的实例。
  • 检查 bulList.intype.ToString() 是一些不为空的文本,它的值与下拉列表中的项目匹配。
  • bulList.intype.ToString() 正在传递 DB 中的确切值,但 Dropdownlist 始终传递 --select--。
  • 也许您应该删除第一个项目的 Selected="True"。无论如何,当页面第一次加载时,你会得到它,因为它是你列表中的第一个。还使用 bulList.intype.ToString().Trim() 以便清除数据库值中可能存在的任何空间。希望对您有所帮助。
【解决方案2】:
BulletinTypeDropDown.SelectedValue = valueFromDb;

【讨论】:

  • 我做了同样的事情,但 VlauefromDb 给了我来自 Db 的值,但 BulletinTypeDropdown.selectedvalue 没有从 DB 中分配值,它总是显示 --select-- 值。
  • 我的猜测是,在您从数据库中分配 SelectedValue 之后,正在调用 DropDownList1_Load。设置一些断点并验证。
【解决方案3】:

所以下拉列表保持默认值,如果是这样,在你的代码中找到一个绑定方法可能在页面加载中。
否则,如果bulList.intype 正在返回该值,我认为下拉列表无法拒绝显示所选值。可以检查空格的返回值。试试这个:

string s =  = bulList.intype.ToString().Trim();
DropDown.SelectedValue = s;

【讨论】:

  • 不走运,我尝试通过分配 Trim(),但它仍然向我显示与以前相同的值。字符串 S 显示我正确的值,但是当涉及到 DropDown.SelectedValue 时仍然显示我为 - -选择--
【解决方案4】:

这里有可能对你有用的灵魂。 所以创建你的下拉列表。

<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="true" 
        onload="DropDownList1_Load" >
    </asp:DropDownList>


protected void DropDownList1_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        List<string> DDLlist = new List<string>();
        DDLlist.Add("Report");
        DDLlist.Add("News");
        DropDownList1.DataSource = DDLlist;
        DropDownList1.SelectedValue = "Report";
        DropDownList1.DataBind();
    }

您可以添加到 DDLlist 以动态添加新项目。

【讨论】:

  • 我试过了,我得到了我想要的,但问题出在下拉列表中,我看到所有值都分配给了所有值 id。但我只想要下拉列表中不同的项目。
  • 您能否详细说明您希望在列表中显示的内容。
猜你喜欢
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-06
  • 1970-01-01
相关资源
最近更新 更多