Establecer el nombre de la casilla de entrada de HTML en la vista de lista

votos
0

Intento agregar una casilla de verificación en una vista de lista con valor como identificadores de los registros de la base de datos para poder permitir que el usuario verifique los que desean eliminar y cuando hacen clic en el botón Eliminar puedo obtener la colección de valor de la casilla con solicitud .formar.

Mi problema es que, porque checkbox en una vista de lista ASP.NET representa el nombre de la vista de lista en la propiedad del nombre de la casilla de verificación, me impide hacer request.form [checkboxname].

No quiero usar Listviews delete commands pero simplemente use request.form para obtener la colección de valores verificados.

¿Cómo puedo establecer el nombre de la casilla htmlinput para que .NET no lo modifique en el tiempo de renderizado?

Yo he tratado:

        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;

Pero aún se renderiza así:

<input name=PmList$ctrl0$CheckBoxDelete type=checkbox id=PmList_ctrl0_CheckBoxDelete value=3 />
Publicado el 09/08/2009 a las 15:09
fuente por usuario
En otros idiomas...                            


3 respuestas

votos
0

Lo he solucionado con:

    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(','));

No es una solución ideal pero funciona para mí.

Respondida el 09/08/2009 a las 16:14
fuente por usuario

votos
1

Esto está sucediendo porque ListView es un contenedor de nombres. Puedes evitar esto de varias maneras, pero todos se reducen a la elección de:

  • Renderizando el HTML que quieres.
  • Sacando los artículos marcados de una manera diferente.

Lo primero es factible, pero es probable que pierda mucha funcionalidad incorporada de ASP.NET. Aconsejaría no hacerlo a menos que estés profundamente familiarizado con el ciclo de vida de control.

Tienes todo lo que necesitas para sacar los valores de una manera que ASP espera:

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

Solo tiene que esperar a que se rellene la jerarquía de control y, a continuación, pasar por encima de ListView.Items buscando las casillas de verificación. El controlador de eventos del botón "Eliminar" es probablemente un buen lugar desde donde llamarlo.

Por cierto, ¿por qué estás usando un HtmlInputCheckbox, en lugar de un CheckBox?

Respondida el 09/08/2009 a las 18:15
fuente por usuario

votos
0

hago esto

    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);
    }

Un poco más fácil en mi opinión

Respondida el 04/02/2010 a las 20:35
fuente por usuario

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