Asp.Net MVC 4 (C#) - [HttpPost] Dohvacanje vrijednosti iz CheckBox-ova

Pozdrav!

Ne mogu povuci vrijednosti iz poklikanih checkBoxova. U view se posalje lista sa slikama (url-ove) i do svake slike se izgenerira chekBox. Kad poklikam na određene i kliknem obriši označene tj., submit - pukne, ne znam kako da proguglam. Mislim, nasao sam primjere neke, ali nitijedan mi se ne dopada ili ne radi na moj nacin - kolko god glupo to zvucalo.
Ovako izgleda moj kod:

Controller:

        //BRISANJE FOTOGRAFIJA
        public ActionResult DeletePhoto()
        {
            List<Picture> lst = new List<Picture>();
            lst = PictureDAL.SelectAllPicturesByProductCategoryID(4);
            if (lst.Count == 0)
            {
                ViewBag.Popis = "";
            }
            else
            {
                ViewBag.Popis = "4";
            }
            return View(lst);
        }

        [HttpPost]
        public ActionResult DeletePhoto(List<Picture> p)
        {
            [B]foreach (var item in p) //OVDJE PUCA[/B]
            {
                if (item.IsCheckedForDelete == true)
                {
                    System.IO.File.Delete(item.Small_Picture_Path);
                    System.IO.File.Delete(item.Normal_Picture_Path);
                    bool isDeleted = PictureDAL.DeletePictureFromDB(item.Picture_Id);
                }
            }
            return RedirectToAction("Index");
        }

OVO JE VIEW:

@model List<Test.Models.Picture>
.......
if (ViewBag.Popis == "")
    {
        <a>Nema slika...</a>
}
    else
    {
        <div id="foto">
            <ul>
                @foreach (var item in Model)
                {
                    <li>
                        <a href="@item.NormalPicturePath" title="@item.Description">
                            <img src="@item.SmallPicturePath" width="150" height="120" alt="" /></a>
                        [B]<input type="checkbox" name="@item.Picture_Id" value="@item.Picture_Id" />[/B]
                    </li>
                }
            </ul>
            @using (Html.BeginForm())
            {
                <input type="submit" value="Obriši označeno" />
            }
        </div>
}

Na koji način mogu pristupit označenim checkBoxovima u listi nakon submitanja?

Pročitaj ovo Model Binding To A List
i ovo :Editing a variable length list, ASP.NET MVC 2-style - Steve Sanderson’s blog - As seen on YouTube™
preporučujem ti da koristiš drugi primjer.

Koliko znam, a znam jer sam se i ja susreo sa tim, to je neki bug u asp.net mvc frameworku, a kad će biti ispravljeno nemam pojma. A uvijek imaš opciju i da koristiš umjesto

List lst

FormCollection frmC

Hvala na odgovoru, ali na žalost bezuspješno. Uvijek mi je Lista koja se vrati prazna.
Ono što sam odlučio sad napravit jest, umjesto chkBoxova jednostavno ispod svake minijaturne slike stavit Ajax.ActionLink(“Obriši”, …) i to ce fino hodat.

Slika će se obrisat i automatski će se učitat novi popis. Žao mi je kaj nisam uspio sa chkBoxovima, al’ trenutno si ne mogu priuštit još zafrkancije oko toga, pa ću se bacit na to mrvicu kasnije.

U svakom slučaju hvala na linkovima.

Bas zbog toga asp.net mvc ima onaj Html.CheckBoxFor, koji renderira i hidden field da bi mogao dobiti vrijednost ako checkbox nije odabran!

Evo gledam sada jedan svoj checbox, stavio sa GET forme da vidim vrijednosti u URLu, i kada checkiram:
NekiCheckBox=true&NekiCheckBox=false
a kada nije checkiran:
NekiCheckBox=false

a generirani html kod izgleda ovako:

znaci ovaj hidden input je tu da se nesto posalje ako checkbox nije checkiran, jer u tom slucaju forma nista ne posalje!

(nastavak, jer debilni forum daje samo 10min za edit:()

Ali u tvom slucaju, za brisanje slika, svaka slika neka bude u svom Form elementu! Znaci imati ces 10 form elemenata za 10 slika, npr:

<ul>
@foreach (var item in Model)
{
<li>
   <FORM ACTION="/pics/action" METHOD="POST">
   <a href="@item.NormalPicturePath" title="@item.Description">
   <img src="@item.SmallPicturePath" width="150" height="120" alt="" /></a>

    <INPUT TYPE="HIDDEN" VALUE="@PicId" />
    <INPUT TYPE="SUBMIT" VALUE="Brisi" NAME="btnAkcija" />
    <INPUT TYPE="SUBMIT" VALUE="Izmjeni" NAME="btnAkcija" />
   </FORM>
</li>
}
</ul>

i onda u akciji kontrolera:

public ActionResult Action(string btnAkcija, int PicId ) {
 if(btnAkcija == "Brisi") {}
}

mislim da je ovaj nacin sa ForEach pa pregledavanje koji je odabran sa brisanje, onako previse WebForms, a ne MVC :wink:

PS sve je ovo ovako iz glave, nije provjereno dali radi, ali poanta je nadam se opisana…


Copyright © 2022 WM Forum - AboutContact