2011-09-15 20 views
5

Let का कहना है कि हम एक वस्तु हैदो तरह से डेटा बाइंडिंग

class Entity 
{ 
    public string ID {get; set;} 
    public string Name {get; set;} 
} 

मैं इस तरह एक पृष्ठ पर कुछ दो बक्सें को गुण बाध्य करने के लिए चाहते हैं:

<asp:FormView ID="FormView" runat="server"> 
    <ItemTemplate> 
    <asp:textbox ID="TextId" Text='<%# Bind("ID") %>'/> 
    <asp:textbox ID="TextId" Text='<%# Bind("Name") %>'/> 
    </ItemTemplate> 
</asp:FormView> 

और फिर इस बारे में पीछे

public EntityObject 
     { 
      get { return ViewState["Entity"] as Entity; } 
      set { ViewState["Entity"] = value; } 
     } 
protected override void OnInit(EventArgs e) 
     { 
      if (EntityObject== null) 
       EntityObject= new EntityObject(); 

      FormView.DataSource = new[] { EntityObject }; 
      FormView.DataBind(); 
      base.OnInit(e); 
     } 

कोड में और जब मैं बक्सें में मान डालने मैं EntityObject क गुण में इन मूल्यों की अपेक्षा पोस्टबैक के बाद एन पेज रीलोड हो जाता है, लेकिन गुण हमेशा शून्य होते हैं। कृपया मदद करें, मैं गलत कहां जा रहा हूं?

उत्तर

4

उदासी कि कहने के लिए है, लेकिन aps.net .net वस्तुओं के लिए बाध्य दो तरह का समर्थन नहीं करता ... बजाय आप कुछ का उपयोग कर सकते की तरह हर पोस्ट पर "मैनुअल बंधन" वापस (यहाँ AddIncomeSources RepeaterControl है)

 public List<Income> AdditionalIncomeList 
     { 
      get { return ViewState["AdditionalIncome"] as List<Income>; } 
      set { ViewState["AdditionalIncome"] = value; } 
     }     
      foreach (RepeaterItem item in AddIncomeSources.Items) 
      { 
       var amount = (TextBox)item.Controls.Cast<Control>().First(c => c.ID == "Amount"); 
       var document = (DropDownList)item.Controls.Cast<Control>().First(c => c.ID == "Document"); 
       AdditionalIncomeList[item.ItemIndex].Amount = amount.Text.ToDouble(); 
       AdditionalIncomeList[item.ItemIndex].IncomeDocument = document.SelectedValue; 
      } 
      AddIncomeSources.DataSource = AdditionalIncomeList; 
      AddIncomeSources.DataBind(); 
0

OnInit में आप हमेशा शून्य पर .. उन कोड को हटा दें और पृष्ठ लोड में रखने के लिए कर रहे हैं ..

केवल वापस सब पोस्ट में नहीं बहुत पहले समय में बाध्य करने के लिए की जरूरत है।

Page_Load() {

if(!Page.IsPostBack) 
{ 
    if (EntityObject== null) 
      EntityObject= new EntityObject(); 

     FormView.DataSource = new[] { EntityObject }; 
     FormView.DataBind(); 
} 

}

+0

कि सहायक, अब दर्ज किए गए मानों हो रहा है पोस्टबैक के बाद रहता है, लेकिन जब मैं EntityObject का उपयोग यह stiil सभी nulls मेरे ऊपर टिप्पणी पर – Alexander

+0

नजर है और इसके साथ प्रयास करें .. उम्मीद है कि उन मदद करता है .. –

0
यहाँ

समस्या आप dynami बनाने के लिए कोशिश कर रहे हैं है सी नियंत्रण।

आप .aspx पेज में एक gridview नियंत्रण का उपयोग कर सकते हैं और डेटा के लिए बाध्य है, यह तुम्हारा के बजाय डिफ़ॉल्ट रूप से viewstate है ..

वैसे भी वेब राज्यविहीन है, हम ViewState या सत्र या आवेदन के माध्यम से डाटा प्राप्त करना चाहिए। इसके अलावा आप इसे कैश में रख सकते हैं लेकिन विश्वसनीय नहीं हैं (हम इसे व्यावहारिक रूप से भरोसेमंद बना सकते हैं)। अधिकांश .NET नियंत्रणों में व्यूस्टेट इन-बिल्ट है।

+0

क्योंकि मुझे अंतर्निहित डेटासोर्स में डेटाटेबल के रूप में प्रदर्शित डेटा के प्रदर्शन और संपादन पंक्तियों के लिए उपयुक्त ग्रिडव्यू पता है, लेकिन मुझे किसी प्रकार का फॉर्म प्रदर्शित करने की आवश्यकता है जिसे buisness ऑब्जेक्ट से बांधना चाहिए और यह है समर्थित नहीं है कारण वेब स्टेटलेस है) – Alexander

0

उन लोगों के लिए, मैंने यह जावास्क्रिप्ट प्लगइन बनाया है। यह डेटा डब्ल्यूपीएफ के बहुत करीब है और इसका उपयोग करना आसान है। यह एक .txt फ़ाइल

https://github.com/jdemeuse1204/ObjectDataBinding

यहाँ में प्रलेखन संलग्न किया है मेरी बाइंडिंग से एक

<input runat="server" class="popoutEditInput" style="width: 50px;" data-bind="path: Quote" /> 

कैसा दिखता सक्रिय करने के लिए आप

$("#yourelementname").observe(yourobject, 'yourbindingname'); 

फोन प्राप्त करने के लिए का एक उदाहरण है वस्तु या बचत के लिए वापस ऑब्जेक्ट

var object = $("#yourelementname").getObserveObject('yourbindingname'); 
संबंधित मुद्दे