2009-08-23 6 views
0

Bei btnSave - button event-handler gibt SelectedValue in den folgenden zwei Zeilen immer null zurück.asp.net Dropdown-Liste, die keinen Wert auswählt

not.TargetSessionCode = this.sessionsDropDownList1.SelectedValue; 
not.CourseCode = this.coursesDropDownList1.SelectedValue; 

Kann jemand sagen warum?

Das ist mein aspx-Code:

<%@ Page Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="TeacherComposeNotice.aspx.cs" Inherits="Ice_Web_Portal_v_3_0_WebApplication.Teacher.TeacherComposeNotice" Title="Untitled Page" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
    <table style="width: 270px"> 
     <tr> 
      <td style="text-align: right"> 
       Session:</td> 
      <td colspan="2"> 
       <asp:DropDownList ID="sessionsDropDownList1" runat="server" Width="178px"> 
       </asp:DropDownList></td> 
      <td colspan="1" style="width: 6px"> 
       <asp:Label ID="userNameLabel" runat="server" Text="usernameLabel" Width="167px"></asp:Label></td> 
     </tr> 
     <tr> 
      <td style="text-align: right"> 
       Courses:</td> 
      <td colspan="2"> 
       <asp:DropDownList ID="coursesDropDownList1" runat="server" Width="178px"> 
       </asp:DropDownList></td> 
       <td colspan="1"><asp:Label id="labCourses" runat="server" Width="167px" Text="labCourses"></asp:Label></td> 
     </tr> 
     <tr> 
      <td style="text-align: right"> 
       Subject:</td> 
      <td colspan="3"> 
       <asp:TextBox ID="mailSubjectTextBox" runat="server" Width="343px"></asp:TextBox></td> 
     </tr> 
     <tr> 
      <td style="text-align: right" valign="top"> 
       Content:</td> 
      <td colspan="3"> 
       <asp:TextBox ID="mailContentTextBox" runat="server" Height="181px" Width="343px" Font-Names="Verdana"></asp:TextBox></td> 
     </tr> 
     <tr> 
      <td style="text-align: right" valign="top"> 
       Expiry Date :</td> 
      <td colspan="3"> 
      </td> 
     </tr> 
     <tr> 
      <td style="text-align: right" valign="top"> 
      </td> 
      <td colspan="3" style="text-align: center"> 
       &nbsp;</td> 
     </tr> 
     <tr> 
      <td style="text-align: right" valign="top"> 
      </td> 
      <td colspan="3" style="text-align: left"> 
       <asp:Label ID="errorMessageLabel" runat="server" ForeColor="#C00000" Text="***" Width="314px"></asp:Label></td> 
     </tr> 
     <tr> 
      <td style="text-align: right" valign="top"> 
      </td> 
      <td colspan="3" style="text-align: left"> 
       <asp:Button ID="btnBack" runat="server" OnClick="btnBack_Click" Text="Back" /> 
       <asp:Button ID="btnSave" runat="server" OnClick="btnSave_Click" Text="Save" /></td> 
     </tr> 
    </table> 
</asp:Content> 

Dies ist mein Code-Behind:

public partial class TeacherComposeNotice : System.Web.UI.Page 
     { 
      string username = string.Empty; 

      protected void Page_Load(object sender, EventArgs e) 
      { 
       username = (string)Request.QueryString["username"]; 

       if (!IsPostBack) 
       { 
        LoadAllSessionsToDDL(); 
        LoadAllCoursesToDDL(); 
       } 

      } 

      private void LoadAllSessionsToDDL() 
      { 
       this.sessionsDropDownList1.Items.Clear(); 

       List<Ice_Web_Portal.BO.Session_> items = Ice_Web_Portal.BO.Session_.GetAllSessions(); 

       this.sessionsDropDownList1.DataSource = items; 
       this.sessionsDropDownList1.DataTextField = "SessionName"; 
       this.sessionsDropDownList1.DataValueField = "SessionCode"; 
       this.sessionsDropDownList1.DataBind(); 

       this.sessionsDropDownList1.SelectedIndex = 0; 
      } 

      private void LoadAllCoursesToDDL() 
      { 
       this.coursesDropDownList1.Items.Clear(); 

       List<Course> items = Course.GetCourses(); 

       this.coursesDropDownList1.DataSource = items; 
       this.coursesDropDownList1.DataTextField = "CourseName"; 
       this.coursesDropDownList1.DataValueField = "CourseCode"; 
       this.coursesDropDownList1.DataBind(); 
      } 

      protected void btnBack_Click(object sender, EventArgs e) 
      { 
       Server.Transfer("~/Teacher/TeacherControlPanel.aspx?username=" + username); 
      } 

      protected void btnSave_Click(object sender, EventArgs e) 
      { 
       Ice_Web_Portal.BO.Teacher teacher = Ice_Web_Portal.BO.Teacher.GetTeacherByUsername(username); 

       if (teacher != null) 
       { 
        Notice not = new Notice(); 
        not.HangingDate = DateTime.Now; 
        not.TeacherCode = teacher.TeacherCode; 
        not.TargetSessionCode = this.sessionsDropDownList1.SelectedValue; 
        not.CourseCode = this.coursesDropDownList1.SelectedValue; 
        not.NoticeSubject = this.mailSubjectTextBox.Text; 
        not.NoticeContent = this.mailContentTextBox.Text; 
        not.ExpiryDate = DateTime.Now.AddMonths(1); 
        not.IsExpired = false; 

        bool success = Notice.Save(not); 

        if (success) 
        { 
         errorMessageLabel.Text = "Saved"; 
        } 
        else 
        { 
         errorMessageLabel.Text = "Save failed"; 
        } 
       } 
       else 
       { 
        //labErrorMessage.Text = "No teacher found"; 
       } 
      } 
     } 

Antwort

1

Sehr seltsam. Ihr Code scheint vollkommen in Ordnung zu sein. Ich habe versucht, die Seite mit dem folgenden Code zu rekonstruieren hinter:

public partial class DropdownTests : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      LoadAllCoursesToDDL(); 
     } 
    } 

    private List<Course> GetDummyCourses() 
    { 
     return new List<Course>{ 
      new Course{ CourseCode = "A12", CourseName = "Introduction to Programming"}, 
      new Course{ CourseCode = "B112", CourseName = "Theory of Computing"} 
     }; 
    } 

    private void LoadAllCoursesToDDL() 
    { 
     this.coursesDropDownList1.Items.Clear(); 

     List<Course> items = GetDummyCourses(); 

     this.coursesDropDownList1.DataSource = items; 
     this.coursesDropDownList1.DataTextField = "CourseName"; 
     this.coursesDropDownList1.DataValueField = "CourseCode"; 
     this.coursesDropDownList1.DataBind(); 
    } 

    protected void btnBack_Click(object sender, EventArgs e) 
    { 
     //Server.Transfer("~/Teacher/TeacherControlPanel.aspx?username=" + username); 
    } 

    protected void btnSave_Click(object sender, EventArgs e) 
    { 
     string code = coursesDropDownList1.SelectedItem.Value; 
     string code2 = coursesDropDownList1.SelectedValue; 
    } 
} 

public class Course 
{ 
    public string CourseCode { get; set; } 
    public string CourseName { get; set; } 
} 

Es funktionierte nur völlig in Ordnung. Im Fall, versuchen Sie, coursesDropdownList1.SelectedItem.Value anstelle von "" direkt zu verwenden. Sollte nichts ausmachen, aber nur um es zu versuchen.

Als Versuch würde ich auch eine neue Seite erstellen, kopieren Sie den ASPX-Code dort und erstellen Sie den CodeBehind dafür. Meiner Meinung nach muss es etwas mehr geben, das es zum Scheitern bringt. Erstellen und fügen Sie einige Felder dynamisch zur Laufzeit zur Benutzeroberfläche hinzu? Einige benutzerdefinierte Serversteuerungen usw. ?? Ihr Problem könnte sein, dass Sie Ihren ViewState verlieren.

+0

Nein. Ich füge nichts dynamisch hinzu. Sonst noch etwas zu überprüfen? courseDropDownLoat.SelectedItem ist null. – anonymous

+0

haben Sie versucht, diese Seite "neu zu programmieren". Im Grunde legen Sie den ASPX-Code und das Codebehind in eine neue Datei. Oft hilft dir das. Übrigens, hat mein vereinfachtes Beispiel für Sie funktioniert? – Juri

+1

Eine andere Sache kommt mir in den Sinn. Überprüfen Sie, ob Sie auf Ihrer Hauptseite oder an einem anderen Ort "EnableViewState = false" angegeben haben. – Juri

1

Ich hatte das gleiche Problem, aber enableViewState = true ist die einzige Lösung, die es funktioniert. Sehr seltsam.

Verwandte Themen