Set HTML ingang checkbox naam in lijstweergave

stemmen
0

Ik ben op zoek naar een checkbox in een lijstweergave met de waarde toe te voegen als id's van de records uit de database, dus ik kan de gebruiker toestaan ​​om degenen die ze wilt verwijderen controleren en wanneer ze op de delete-knop kan ik waarde collectie krijgen van checkbox met het verzoek .het formulier.

Mijn probleem is, omdat de checkbox in een lijstweergave ASP.NET maakt de naam listview into the property naam van de checkbox, het voorkomt dat ik Request.Form doen [ checkboxname].

Ik wil niet te listviews gebruiken commando's te verwijderen, maar gewoon gebruik maken van Request.Form aan de collectie van de geregistreerde waarden te krijgen.

Hoe kan ik de naam van het selectievakje HtmlInput dus .NET verandert niet in de tijd te maken?

Ik heb geprobeerd:

        ListViewDataItem dataItem = (ListViewDataItem)e.Item;
        HtmlInputCheckBox _CheckBoxDelete = (HtmlInputCheckBox)e.Item.FindControl(CheckBoxDelete);

            _CheckBoxDelete.Visible = true;
            _CheckBoxDelete.Value = DataBinder.Eval(dataItem.DataItem, id).ToString();
            _CheckBoxDelete.Name = deletechecked;

Maar toch maakt, zoals:

<input name=PmList$ctrl0$CheckBoxDelete type=checkbox id=PmList_ctrl0_CheckBoxDelete value=3 />
De vraag is gesteld op 09/08/2009 om 15:09
bron van user
In andere talen...                            


3 antwoorden

stemmen
0

Ik heb het uitgezocht met:

    string idCollectionTodelete = string.Empty;

    foreach (string x in Request.Form)
    {
        if (x.IndexOf("CheckBoxDelete") > -1)
        {
             idCollectionTodelete += Request.Form[x] + ",";
        }

    }
    new DB().DeleteUserPm(
      ActiveUsername(), subdomain, idCollectionTodelete.TrimEnd(','));

Het is geen ideale oplossing, maar het werkt voor mij.

antwoordde op 09/08/2009 om 16:14
bron van user

stemmen
1

Dit gebeurt omdat ListView is een Naming Container. U kunt rond dit in een paar manieren, maar ze hebben allemaal neer op de keuze van:

  • Waardoor de HTML u wilt.
  • Het uittrekken van de gecontroleerde items op een andere manier.

De eerste is goed te doen, maar je zult waarschijnlijk verliezen veel ASP.NET's ingebouwde functionaliteit. Ik zou afraden, tenzij je diep vertrouwd met de controle levenscyclus zijn.

Je hebt alles wat je nodig hebt voor het trekken van de waarden in een manier ASP verwacht werd:

HtmlInputCheckBox _CheckBoxDelete = (HtmlInputCheckBox)item.FindControl("CheckBoxDelete");

Je hoeft alleen maar te wachten op de controle hiërarchie worden bevolkt, en dan lus over de ListView.Items op zoek naar de checkboxes. Uw "Delete" event handler knop is waarschijnlijk een goede plek om deze oproep uit.

Overigens, waarom bent u met behulp van een HtmlInputCheckbox, in plaats van een CheckBox?

antwoordde op 09/08/2009 om 18:15
bron van user

stemmen
0

ik doe dit

    List<HtmlInputCheckBox> chkDeleteContacts = new List<HtmlInputCheckBox>();

    foreach (RepeaterItem item in rptrFamilyContacts.Items)
    {
        chkDeleteContacts.Add((HtmlInputCheckBox)item.FindControl("chkDeleteContact"));
    }

    foreach(HtmlInputCheckBox chkDeleteContact in chkDeleteContacts)
    {
        //Delete Contact
        if(chkDeleteContact.Checked)
            blnStatus = BusinessUtility.DeleteConsumerContact(LoginConsumerID, chkDeleteContact.Value);
    }

Iets makkelijker in mijn mening

antwoordde op 04/02/2010 om 20:35
bron van user

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more