2013-02-15 2 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이라는 * 리터럴 * 속성을 찾고 있기 때문에 그것이라고 생각합니다. Rang이라는 필드가 있지만 속성과 동일하지 않습니다. 그냥 생각. –

+1

@David, 그 생각은 좋은 대답을 만들 것입니다 :) –

+0

@DavidW 놀라운 것은 내가 처음으로 웹 사이트를 운영했을 때 그것을 작동시킬 수 있다는 것입니다. 바로 다음에 오류가 컴파일 된 후 .. –

답변

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

필드 및 속성은 그 속성에 공개 "래퍼를 제공 관련된 "메커니즘을 클래스의 각 인스턴스의"개인 "필드 데이터에 추가합니다. 그러나 그것들은 서로 다른 개념이며 상호 교환 할 수 없다는 것을 알아 두는 것이 중요합니다. field 선언 (일부 객체 용어로 멤버라고도 함) 만 속성으로 선언되지 않습니다. @ FrédéricHamidi가 말한 것에 유의하십시오. 문서는 "value of the expression parameter must evaluate to a public **property**" (강조 표시)입니다.

으로 직접 마이크로 소프트, EVAL, 방법은 하나 또는 다른에서 발췌 에서 언급하는 특성을 가지고있다. 도움이

enter image description here

희망.

+0

다시 수정할 수 있기 때문에 이것은 대답이 될 수 없습니다. <% # Eval ("Rang ") %>'를 <%# "Hi" %>으로 설정하면 2 개가됩니다. 그래서 내 데이터가 결정됩니다 ... –

+2

'Rang'은 공용 속성이 아니기 때문에'Mangdi,'Eval ("Rang")'은 빈 문자열 (또는'null', 확실하지 않음)을 반환합니다. [documentation] (http://msdn.microsoft.com/en-us/library/4hx47hfe.aspx)는 명시 적으로 'expression 매개 변수의 값이 공용 속성으로 평가되어야합니다'라고 말합니다. 바인딩 문자열 리터럴은'Eval()'이 관련이 없기 때문에 작동합니다. –

+0

@ FrédéricHamidi 나는 내 Container.DataItem을 두 번 점검했고 두 개의 공개 필드를 가지고있다. –

관련 문제