2013-12-13 29 views
0

我真的需要一些帮助,因为我自己弄不清楚。尽管我遵循了很多教程,但我的下拉列表总是返回第一个值。所以今天我决定使用一个代码,它应该可以工作,因为它来自msdn.microsoft网站。MSDN DropDownList示例总是返回第一个值

我试过我的index.aspx这两个C#代码,但都没有工作,它总是返回到'白色'(第一个值)。 任何人都可以请赐教。

(PS:我使用.NET 3.5 MVC2和我使用VS 2008)

感谢。

编辑:我的Index.aspx

EDIT2:嗯,缺乏经验使我承担了错误的观念,我工作到mvc.ViewPage而不是UI.Page。现在它都在工作。再次感谢。

<%@ Page Language="C#" AutoEventWireup="True" %> 
<%@ Import Namespace="System.Data" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" > 
<script runat="server" > 

    void Selection_Change(Object sender, EventArgs e) 
    { 
    // Set the background color for days in the Calendar control 
    // based on the value selected by the user from the 
    // DropDownList control. 
    Calendar1.DayStyle.BackColor = 
     System.Drawing.Color.FromName(ColorList.SelectedItem.Value); 

    } 

    void Page_Load(Object sender, EventArgs e) 
    { 

    // Load data for the DropDownList control only once, when the 
    // page is first loaded. 
    if(!IsPostBack) 
    { 
     // Specify the data source and field names for the Text 
     // and Value properties of the items (ListItem objects) 
     // in the DropDownList control. 
     ColorList.DataSource = CreateDataSource(); 
     ColorList.DataTextField = "ColorTextField"; 
     ColorList.DataValueField = "ColorValueField"; 

     // Bind the data to the control. 
     ColorList.DataBind(); 

     // Set the default selected item, if desired. 
     ColorList.SelectedIndex = 0; 

    } 

    } 

    ICollection CreateDataSource() 
    { 
    // Create a table to store data for the DropDownList control. 
    DataTable dt = new DataTable(); 

    // Define the columns of the table. 
    dt.Columns.Add(new DataColumn("ColorTextField", typeof(String))); 
    dt.Columns.Add(new DataColumn("ColorValueField", typeof(String))); 

    // Populate the table with sample values. 
    dt.Rows.Add(CreateRow("White", "White", dt)); 
    dt.Rows.Add(CreateRow("Silver", "Silver", dt)); 
    dt.Rows.Add(CreateRow("Dark Gray", "DarkGray", dt)); 
    dt.Rows.Add(CreateRow("Khaki", "Khaki", dt)); 
    dt.Rows.Add(CreateRow("Dark Khaki", "DarkKhaki", dt)); 

    // Create a DataView from the DataTable to act as the data source 
    // for the DropDownList control. 
    DataView dv = new DataView(dt); 
    return dv; 

    } 

    DataRow CreateRow(String Text, String Value, DataTable dt) 
    { 
    // Create a DataRow using the DataTable defined in the 
    // CreateDataSource method. 
    DataRow dr = dt.NewRow(); 

    // This DataRow contains the ColorTextField and ColorValueField 
    // fields, as defined in the CreateDataSource method. Set the 
    // fields with the appropriate value. Remember that column 0 
    // is defined as ColorTextField, and column 1 is defined as 
    // ColorValueField. 
    dr[0] = Text; 
    dr[1] = Value; 

    return dr; 

    } 
</script> 
<head runat="server"> 
    <title> DropDownList Data Binding Example </title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <h3> DropDownList Data Binding Example </h3> 
     Select a background color for days in the calendar. 
     <br /><br /> 
     <asp:Calendar id="Calendar1" 
     ShowGridLines="True" 
     ShowTitle="True" 
     runat="server"/> 
     <br /><br /> 
     <table cellpadding="5"> 
      <tr> 
      <td> 
       Background color: 
      </td> 
      </tr> 
      <tr> 
      <td> 
       <asp:DropDownList id="ColorList" 
        AutoPostBack="True" 
        OnSelectedIndexChanged="Selection_Change" 
        runat="server"/> 
      </td> 
     </tr> 
     </table> 
    </form> 
</body> 
</html> 

回答

3

填充DropDownList最常见的错误是DropDownList绑定到页面加载中的数据。请确保填充它的呼叫处于If (!IsPostback)

的条件内这将允许它首次加载,但在回发时无法在您希望它保留选定的选项时进行回发。如果不阻止回发时的绑定,则数据将在select元素中重新填充,并且所选值将丢失。

+0

链接中的用户询问:如何获取默认值,< - 在回发后再次选择城市 - >作为选定值,但我需要相反的值,我选择的值应保留在落下。 – tesla

+0

我已经删除了确实不正确的链接,并添加了一些额外的细节 – guymid

+0

查看代码,在我看来,填充下拉列表的调用位于if(!IsPostBack)内部,但我设置了一个断点每次我选择一个值,它会停止在if(!IsPostBack)中的断点处,我也使用if(!Page.IsPostBack)。 – tesla