Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么数据绑定可以';找不到存在的财产?_C#_Asp.net_Data Binding - Fatal编程技术网

C# 为什么数据绑定可以';找不到存在的财产?

C# 为什么数据绑定可以';找不到存在的财产?,c#,asp.net,data-binding,C#,Asp.net,Data Binding,我已经声明了一个类,但是当我试图访问它的成员时,我得到了以下错误: 数据绑定:“reapTest.Toop”不包含名为“Rang”的属性 WebForm1.aspx.cs: namespace reapTest { public class Toop { public string Rang; public int Gheymat; } public static class MyData { public stati

我已经声明了一个类,但是当我试图访问它的成员时,我得到了以下错误:
数据绑定:“reapTest.Toop”不包含名为“Rang”的属性

WebForm1.aspx.cs:

namespace reapTest {

    public class Toop {
        public string Rang;
        public int Gheymat;
    }

    public static class MyData {

        public static Toop[] TP = new Toop[] { new Toop() { Rang = "Ghermez", Gheymat = 100 }, new Toop() { Rang = "Yellow", Gheymat = 44 } };
        public static Toop[] RT() {
            return TP;
        }

    }

    public partial class WebForm1 : System.Web.UI.Page {
        protected void Page_Load(object sender, EventArgs e) {

        }
    }
}
WebForm1.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="reapTest.WebForm1" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

        <asp:Repeater ID="Repeater1" runat="server" DataSourceID="ObjectDataSource1">
            <ItemTemplate>
                <%#Eval("Rang")%>
            </ItemTemplate>
        </asp:Repeater>

        <asp:ObjectDataSource runat="server" ID="ObjectDataSource1" SelectMethod="RT" TypeName="reapTest.MyData"></asp:ObjectDataSource>
    </div>
    </form>
</body>
</html>


我认为这是因为它正在寻找一个名为Rang的文本属性。您有一个名为Rang的字段,但它与属性不同,即:

编辑:代码示例

public class Toop {

     // These values are *fields* within the class, but *not* "properties." 
     private string m_Rang; // changing these field decls to include m_ prefix for clarity
     private int m_Gheymat; // also changing them to private, which is a better practice

     // This is a public *property* procedure
     public string Rang     
     {
         get
         {
             return m_Rang;
         }
         set
         {
             m_Rang = value;
         }
     }
}
字段和属性是相关的,因为属性为类的每个实例的“私有”字段数据提供公共“包装器”机制。但必须注意的是,它们是独立的概念,不能互换。仅仅拥有一个字段声明(在某些对象术语中也称为成员)并不会将其作为属性公开。请注意@FrédéricHamidi所说的内容-文档中声明了
“表达式参数的值必须计算为公共**属性**”
(强调我的属性)

正如直接从微软摘录的这篇文章所指出的,EVAL无论如何都必须有一个属性


希望这能有所帮助

我相信这是因为它正在寻找一个名为Rang的文本属性。您有一个名为Rang的字段,但它与属性不同。只是一个想法。@David,这个想法会是一个很好的答案:)@DavidW令人惊讶的是,当我第一次运行这个网站时,它就可以工作了。就在下一次编译之后,错误出现了。仔细考虑后,我认为你是对的,@FrédéricHamidi:)谢谢:)这不是答案,因为我再次将
修改为,得到了两个Hi。这意味着我的数据已确定…@Mahdi,
Eval(“Rang”)
将返回空字符串(或
null
,不确定),因为
Rang
不是公共属性,而是公共字段。显式提到
表达式参数的值必须计算为公共属性
。绑定字符串文字之所以有效,是因为不涉及
Eval()
。@FrédéricHamidi我已经仔细检查了我的Container.DataItem,它有两个公共字段。@Mahdi但我们要说的是,您必须公开一个公共属性,而不仅仅是字段。有关详细信息,请参阅我修改后的答案。@FrédéricHamidi谢谢,现在我明白你的意思了。接受和批准