BLL.User user = new BLL.User(); 
ArrayList allUser = user.AllUser();//数据层返回的是 Model中的UserName和PassWord的ArrayListArrayList ddlData = new ArrayList();
foreach( Model.User userMode in allUser)
 {
 ListItem listItem = new ListItem();
 listItem.Text = userMode.UserName;
 listItem.Value = userMode.PassWord;
 ddlData.Add(listItem);
 }
ddl.DataSource = ddlData;
ddl.DataBind();
问 ddl.SelectedValue.ToString(); 为什么总是UserName,而不是 PassWord???我看网页源代码时<option value="admin">admin</option>value值应对应password(userMode.PassWord)的值,而不是UserName的值
我先后用:
1.ddl.Items.Add(new ListItem(userMode.UserName,userMode.PassWord)); 一样的问题2.
BLL.User user = new BLL.User();
ArrayList allUser = user.AllUser();
string[] aa = (string[])allUser.ToArray(typeof(string));
ddl.DataSource = aa;
ddl.DataBind();这行出错  string[] aa = (string[])allUser.ToArray(typeof(string));源数组中至少有一个元素无法被向下转换到目标数组类型。
以上都不行。
附数据模型:public class User
{
private string _username;
private string _password; public string UserName
{
get
{return _username;}
set
{_username = value;}
} public string PassWord
{
get
{return _password;} set
{_password = value;}
}
}

解决方案 »

  1.   

    设置一下ddl.DataTextField和DataValueField呀
      

  2.   

    把你的程序改为如下
    ArrayList ddlData = new ArrayList();
    foreach( Model.User userMode in allUser)
     {
    ddl.Items.Add(new ListItem(userMode.UserName,userMode.PassWord));
     }
      

  3.   

    ddl.Items.Add(new ListItem(userMode.UserName,userMode.PassWord)); 一样的<option value="admin">admin</option>value还是不能为userMode.PassWord
      

  4.   

    那你单独写ddl.Items.Add(new ListItem("admin","pass")); 看会不会还象上面一样,
      

  5.   

    单独写不会出现这个问题。 我监视ddl时看到 里面的Items下的listItems Text 和 Value对应的是就是我的UserName和PassWord的值。为什么在绑定时就变了呢?
      

  6.   

    我知道了DropDownlist有DataSource,还有DataTextField、DataValueField啊!因为你只制定了datasource没有制定datatextfield和datavaluefield,所以显示不出值
      

  7.   

    我这里应该如ddl.DataTextField=;ddl.DataValueField=; 这两个值?
      

  8.   

    foreach( Model.User userMode in allUser)
     {
     ListItem listItem = new ListItem();
     listItem.Text = userMode.UserName;
     listItem.Value = userMode.PassWord;
     ddlData.Add(listItem);
     }改成foreach( Model.User userMode in allUser)
     {
     ddl.Items.Add(new ListItem(userMode.UserName,userMode.PassWord)); 
     }
    然后把
    ddl.DataSource = ddlData;
    ddl.DataBind();
    这些去掉,先注释掉,运行看看,能获得值不?
      

  9.   

    还是一样。晕死了。我在监视看到ArrayList allUser = user.AllUser();
    中的allUser这个里面有值UserName,PassWord对应的。不知为什么?
      

  10.   

    楼上正解!
    只要
    ddl.DataSource = ddlData;
    ddl.DataBind();
    去掉就行了,代码改不改无所谓!
      

  11.   

    再不行跟踪看一下:
    listItem.Text = userMode.UserName;
    listItem.Value = userMode.PassWord;
    对应的值!
      

  12.   

    只要
    ddl.DataSource = ddlData;
    ddl.DataBind();
    去掉就行了,代码改不改无所谓!好了。多谢 hackate(兰花开香入梦境,独思佳人亦飘然!!) 和 withjun(withjun) 改日好好学习!