2011-11-12 21 views
6

से डेटा प्राप्त करना मैं एएसपी.NET के लिए बहुत नया हूं और मुझे यकीन नहीं है कि मैं इस बारे में सही तरीके से जा रहा हूं। मेरे पास एक पुनरावर्तक है जो "छवि" वस्तुओं की सूची से जुड़ा हुआ है। प्रत्येक RepeaterItem के भीतर एक चेकबॉक्स है और मेरे पास एक बटन ऑनक्लिक ईवेंट है, जिसे मैं चेक किए गए छवि ऑब्जेक्ट्स के कुछ विशेषताओं को प्रदर्शित करना चाहता हूं।एएसपी.Net - RepeaterItem

लेबल अद्यतन, लेकिन मेटाडेटा खाली है। DataBinder.Eval (i.DataItem, "FileName") वापस आ रहा है, लेकिन मुझे यकीन नहीं है क्यों? मैंने सोचा कि शायद चेकबॉक्स से पोस्टबैक समस्याएं पैदा कर रहा था लेकिन अगर मैं किसी भी पोस्टबैक के पहले डेटा प्रदर्शित करने का प्रयास करता हूं तो मुझे अभी भी वही समस्या मिलती है, इसलिए शायद मैं गुणों को सही तरीके से नहीं ला रहा हूं। या मैं इस बारे में पूरी तरह गलत तरीके से जा रहा हूं? किसी भी मदद की सराहना की।

कोड:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     string importPath = Server.MapPath("~/Images/ForImport"); 
     ImageProcessor processor = new ImageProcessor(importPath); 

     rptImageList.DataSource = processor.ImageList; 
     rptImageList.DataBind(); 
    } 
} 

protected void btnImport_Click(object sender, EventArgs e) 
{ 
    foreach (RepeaterItem i in rptImageList.Items) 
    { 
     CheckBox chk = i.FindControl("chkSelectImage") as CheckBox; 
     if (chk.Checked) 
     { 
      Testlabel.Text += "Selected: " + DataBinder.Eval(i.DataItem, "FileName"); 
     } 
    } 
} 

HTML:

<asp:Repeater ID="rptImageList" runat="server"> 
    <ItemTemplate> 
    <div class="photoinstance"> 
     <asp:Image runat="server" ImageUrl='<%#"Images/ForImport/" +DataBinder.Eval(Container.DataItem, "FileName") %>' /> 
     <asp:CheckBox ID="chkSelectImage" AutoPostBack="true" runat="server"/> 
     <p><%#Eval("FileName")%> - <%#Eval("FileSize")%> bytes</p> 
     </div> 
    </ItemTemplate> 
</asp:Repeater> 
+1

'DataItem' संपत्ति' ItemDataBound' घटना में, केवल पोस्टबैक पहले से कहीं उपलब्ध है। यह एमएसडीएन पर बहुत अच्छी तरह से इंगित नहीं किया गया है, लेकिन सभी एएसपी.NET नियंत्रणों में सुसंगत है – jwiscarson

उत्तर

8

i.DataItem उपलब्ध नहीं है btnImport_Click पर (शून्य है), (केवल ItemDataBound घटना में उपलब्ध है अगर मैं सही ढंग से घटना नाम याद)।
आप फ़ाइल नाम को स्टोर करने के लिए एक छिपी हुई फ़ील्ड का उपयोग कर सकते हैं तो आपको i.FindControl पर कॉल करना होगा।

0

मुझे लगता है कि यह प्रश्न पूछ रहा है कि पोस्टबैक पर पुनरावर्तक से डेटा कैसे प्राप्त करें और अधिक विशेष रूप से दोबारा के भीतर चेकबॉक्स के साथ कैसे बातचीत करें। तो किसी अन्य नियंत्रण के बाद, यह कैसे करना है इसका एक उदाहरण है;

protected void CheckBox_CheckedChanged(object sender, EventArgs e) 
    { 
     foreach (RepeaterItem ri in Repeater.Items) 
     { 
      foreach (Control c in ri.Controls) 
      { 
       if (typeof(CheckBox) == c.GetType()) 
       { 
        CheckBox checkBox = (CheckBox)c; 
        checkBox.Checked = true; 
       } 
      } 
     } 
    }