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谢谢,现在我明白你的意思了。接受和批准