2013-02-15 91 views
0

我已經聲明瞭一個類,但是當我嘗試訪問它的成員時,出現以下錯誤:
DataBinding:'reapTest.Toop'不包含名爲'Rang'的屬性。爲什麼DataBinding無法找到存在的屬性?

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

我相信這是因爲它正在尋找名爲Rang的* literal *屬性。你有一個叫做Rang的字段,但這不同於一個屬性。只是一個想法。 – 2013-02-15 19:02:26

+1

@David,這個想法會讓人很好的回答:) – 2013-02-15 19:03:16

+0

@DavidW奇妙的是,當我第一次運行網站時,我可以使它工作。 – 2013-02-15 19:04:42

回答

7

我相信這是因爲它正在尋找一個文字財產命名的響了起來。你有一個命名響了,但是這是不一樣的屬性,對機智:

編輯:代碼示例

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說的 - 文檔陳述了"value of the expression parameter must evaluate to a public **property**"(強調我的)。

在本摘錄指出直接從Microsoft,EVAL,一個或其他方式,必須有一個財產

enter image description here

希望幫助。

+0

這不能是答案,因爲我再次修改了'<%#Eval(「Rang 「)%>'到<%# "Hi" %>,我得到兩個嗨。這意味着我的數據是確定的... – 2013-02-15 19:12:55

+2

@Mahdi,'Eval(「Rang」)'將返回空字符串(或'null',不確定),因爲'Rang'不是公有財產,而是公共領域。 [documentation](http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx)明確提到「expression參數的值必須評估爲公共屬性」。綁定字符串文字可以工作,因爲不涉及'Eval()'。 – 2013-02-15 19:20:31

+0

@FrédéricHamidi我有雙重檢查了我的Container.DataItem,它有兩個公共字段。 – 2013-02-15 22:05:12

相關問題