webForumDet fria alternativet

ASP.NET Repeater

3 svar · 465 visningar · startad av matlin

matlinMedlem sedan okt. 2006224 inlägg
#1

Har lite problems med en repeater control jag använder på en av mina aspx sidor. På sidan finns ett uppladdningsscript, när man laddat upp sina bilder görs en postback och då visas thumbnails på de bilder man laddat upp (1..*), samt en textbox (bild rubrik) och en radiobutton(album cover) under varje bild.
Till sist har vi en Button som ska skapa varje bild till ett Picture objekt.

Mitt problem är att jag kommer inte på något bra sätt att kunna få ut alla mina textboxar som hänger ihop med en specifik bild och kunna skapa detta som ett objekt. Har testat en massa att försöka få ur det ur min Repeater control i code-behind. Någon som har något bra tips?

Min .aspx sida:

<asp:Repeater runat="server" ID="ImageRepeater" OnItemDataBound="ImageRepeater_ItemDataBound" OnItemCreated="ImageRepeater_ItemCreated">
           <ItemTemplate>
            <div class="imgContent">
              <div class="img_tn_cntr_144">
                <a href='../../PhotoLibrary/Pictures/<%# DateTimeAddedAlbum + Eval("Name", "/{0}") %>' runat="server" target="_blank">
                  <asp:Image ID="Image1" runat="server" ImageUrl='<%# Eval("Name", "ImageThumbnailer.ashx?img=PhotoLibrary/Pictures/") + DateTimeAddedAlbum + Eval("Name", "/{0}&size=144") %>'
                    CssClass="img_tn" BorderColor="black" BorderWidth="1px" BorderStyle="solid" /></a><br />     
                    
              </div>
              
              <label class="lblPictures">Caption</label>
              <asp:TextBox Width="80px" runat="server" ID="txtCaption"></asp:TextBox><br />
              <label class="lblPictures">Album cover</label>
              <asp:RadioButton GroupName="AlbumCover" runat="server" ID="radioAlbumCover" />
             </div>
            </ItemTemplate>
       </asp:Repeater><br />
       <div class="break"></div>
    </div>
    
    <div style="text-align: right">
  <asp:Button runat="server" ID="btnSave" OnClick="btnSave_Click" />

Min code-behind:

    private void AddAlbum()
    {
        if (!Page.IsValid)
            throw new InvalidOperationException("One or more validators are invalid.");

        Album album = new Album();

        album.Description = this.txtDescription.Text;
        album.Name = this.txtTitle.Text;
        album.Location = this.txtLocation.Text;

        foreach (RepeaterItem item in ImageRepeater.Items)
        {
            
        }
    }

    private void ShowAddedPictures()
    {
        string directoryPath = HttpContext.Current.Request.PhysicalApplicationPath;
        DateTimeAddedAlbum = DateTime.Now.Year.ToString();
        DateTimeAddedAlbum += "-" + DateTime.Now.Month.ToString();
        DateTimeAddedAlbum += "-" + DateTime.Now.Day.ToString();

        string _Path = this.Server.MapPath("~/PhotoLibrary/Pictures/") + _dateTimeAddedAlbum;

        try
        {
            if (Directory.Exists(_Path))
            {
                IList<FileInfo> files = new List<FileInfo>();
                string filters = "*.jpg;*.png;*.gif;*.jpeg";

                foreach (string filter in filters.Split(';'))
                {
                    FileInfo[] fit = new DirectoryInfo(_Path).GetFiles(filter);
                    foreach (FileInfo fi in fit)
                    {
                        files.Add(fi);

                        
                    }
                }
                this.ImageRepeater.DataSource = files;
                this.ImageRepeater.DataBind();
                
            }
        }
        catch (Exception e)
        {
            throw new Exception("An error occured: " + e.Message);
        }
    }
emissionMedlem sedan dec. 19996 721 inlägg
#2

Du måste väl lagra informationen någonstans? En databas, en fil?

matlinMedlem sedan okt. 2006224 inlägg
#3

Hehe ja, det är tanken. Skall lagras i xml filer. Är dock inte där riktigt än.

Säg att jag har laddat upp två bilder. Dessa två bilderna har tillhörande en Textbox och en radiobutton. Vad jag vill göra nu är att hämta värdet (i code-behind) ur den första textboxen samt den första radiobutton för att kunna lagra typ - bild1, rubrik1, true - i min xml fil.

Mitt problem är ju att dessa textboxar skapas dynamiskt (eftersom det är en repeater kan det skapas 1 till hur många som helst) och jag har ingen aning hur jag får tag i värdena ur mina textboxar samt veta vilken av dem det är.

matlinMedlem sedan okt. 2006224 inlägg
#4

Oj, detta var ju pinsamt. Det var inte alls så svårt ju - fast att jag suttit i 8 timmar och kliat mig i huvudet! Genom följande lilla kod fick jag enkelt ut varje dynamiskt skapad asp.net kontroll inom repeatern.

    foreach (RepeaterItem item in ImageRepeater.Items)
    {
        item.FindControl("txtCaption");
    }

Whoopie doo :)

137 ms totalt · 3 externa anrop · v20260731065814-full.fb544a5a
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)