DataBinding:' System.String'不包含名称为' Text'的属性

时间:2017-10-10 10:54:16

标签: c# asp.net objectdatasource

当我使用下拉列表的SelectedItem.Text作为传递给ObjectDataSource的值时,会发生此错误。 这是标记

<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>

此外,我动态地将Select Class文本添加到下拉列表中。

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

1 个答案:

答案 0 :(得分:0)

如果您查看semesterID的标记,它会绑定到SelectedValue,预计会Int32。如果您现在查看classCode的标记,则会在同一对象上绑定SelectedValue.Text。我们从第一个实例知道SelectedValueInt32,它没有名为Text的属性。您需要更正绑定到正确的对象和属性类型。

根据上述代码,ObjectDataSource将无法从SelectedItem.Text中挑选出来的文字。为了解决这个问题,您需要修改ObjectDataSource以获得Selecting这样的事件;

<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>

然后在您的代码中,您已宣布事件;

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