【问题标题】:DataBinding: 'System.String' does not contain a property with the name 'Text'DataBinding:“System.String”不包含名为“Text”的属性
【发布时间】:2018-03-21 18:06:47
【问题描述】:

当我使用下拉列表的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);
        }

【问题讨论】:

  • 您的PropertyName 应该只是Text,而不是属性。活页夹不理解子属性
  • 我有 ClassID,它是一个整数作为下拉列表的值
  • 我打错了。实际上就是 SelectedItem.Text
  • 是的,但您仍然无法绑定到 SelectedValue 的子属性。它必须是顶级属性

标签: c# asp.net objectdatasource


【解决方案1】:

如果您查看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;
}

【讨论】:

  • 错误消失但问题依然存在。我没有得到任何数据,那是因为 SelectedItem.Text objectdataSource 无法获得 SelectedItem.Text
  • 您需要挂钩ObjectDataSourceSelecting 事件并以编程方式提供参数。你不能以你需要的方式直接绑定。
  • @ElhamKohestani,我已经更新了我的答案,说明如何提供SelectedItem.Text
  • 它不工作。我将数据源更改为 DataTable 它运行良好,但使用 objectDataSource 它不工作不知道。 :(
  • @ElhamKohestani 哪一部分不工作?实际上,我将上面的代码示例基于我们在生产中的代码——它应该可以工作。你在看什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多