2017-10-10 4 views
1

Cette erreur se produit lorsque j'utilise le SelectedItem.Text d'une liste déroulante comme valeur à transmettre à ObjectDataSource. Voici le balisageDataBinding: 'System.String' ne contient pas de propriété portant le nom 'Text'

<asp:ObjectDataSource ID="odsInsert" runat="server" SelectMethod="GetStudentInClass2" TypeName="MIHE_MIS.DALS.MidTermExamResultDAL"> 
       <SelectParameters> 
        <asp:ControlParameter DefaultValue="" ControlID="ddlClasses" Name="classCode" PropertyName="SelectedItem.Text" Type="String" /> 
        <asp:ControlParameter ControlID="ddlSemesters" Name="semesterID" PropertyName="SelectedValue" Type="Int32" /> 
        <asp:ControlParameter ControlID="ddlSpecialization" Name="specializationID" PropertyName="SelectedValue" Type="Int32" /> 
       </SelectParameters> 
      </asp:ObjectDataSource> 

De plus, j'ajoute le texte Select Class le dropdownlist dynamiquement.

protected void ddlClasses_DataBound(object sender, EventArgs e) 
     { 
      ListItem list = new ListItem("Select Class", "-1"); 
      this.ddlClasses.Items.Insert(0, list); 
     } 
+0

Votre 'PropertyName' devrait être simplement' Text', pas une propriété. Le classeur ne comprend pas les sous-propriétés – DiskJunky

+0

J'ai le ClassID qui est un nombre entier comme Valeur de la liste déroulante –

+0

J'ai fait une erreur de frappe. en fait c'est SelectedItem.Text –

Répondre

0

Si vous regardez le balisage pour semesterID, il est la liaison à SelectedValue qui devrait être Int32. Si vous regardez maintenant le balisage pour classCode, vous liez SelectedValue.Text sur le même objet. Nous savons dès la première instance que SelectedValue est Int32 qui n'a pas de propriété appelée Text. Vous devrez corriger votre liaison à l'objet et au type de propriété corrects.

Basé sur le code ci-dessus, le ObjectDataSource ne sera pas en mesure de choisir le texte de SelectedItem.Text. Afin de contourner cela, vous devez modifier le ObjectDataSource pour avoir un événement Selecting comme ça;

<asp:ObjectDataSource ID="odsInsert" runat="server" SelectMethod="GetStudentInClass2" 
         TypeName="MIHE_MIS.DALS.MidTermExamResultDAL" 
         OnSelecting="odsInsert_Selecting"> 
    <SelectParameters> 
     <asp:Parameter Name="classCode" Type="String" /> 
     <asp:ControlParameter ControlID="ddlSemesters" Name="semesterID" PropertyName="SelectedValue" Type="Int32" /> 
     <asp:ControlParameter ControlID="ddlSpecialization" Name="specializationID" PropertyName="SelectedValue" Type="Int32" /> 
    </SelectParameters> 
</asp:ObjectDataSource> 

Ensuite, dans votre code, vous avez déclaré l'événement;

protected void odsInsert_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) 
{ 
    e.InputParameters["classCode"] = ddlClasses.SelectedItem.Text; 
} 
+0

J'avais fait une erreur de frappe. J'ai mis à jour ma question –

+0

L'erreur est partie, mais le problème existe toujours. Je ne reçois aucune donnée et c'est à cause de SelectedItem.Text que objectdataSource ne peut pas obtenir le SelectedItem.Text –

+0

Vous devrez vous connecter à l'événement 'Selecting' de' ObjectDataSource' et fournir le paramètre par programmation. Vous ne pouvez pas lier directement de la manière dont vous avez besoin. – DiskJunky