2010-03-06 16 views
5

estoy actualmente en desarrollo de aplicaciones en MVC2 he utilizado desee mutiple etiquetas de formulario en mi solicitud en mi opinión He creado una tabla que tiene la opción Borrar lo cual estoy haciendo a través de Publicar para Eliminar Individual, así que tengo Crear etiqueta de formulario para cada botón. también quiero que el usuario dé la opción de eliminar varios registros, así que les proporciono casillas de verificación. Este formulario debe tener todos los valores de casillas de verificación y todo. así forma obtiene render gusta esta¿Puedo tener una etiqueta de formulario dentro de otro en ASP.net MVC RC2

para cada botón de borrar

<form action="/Home/MutipleDelete" method="post"> 
<input class="button " name="Compare" type="submit" value="Mutipledelete" style="margin-right:132px;" /> 

<input id="chk1" name="chk1" type="checkbox" value="true" /> 

<form action="/Home/Delete" method="post"> 

    <input type="submit" class="submitLink" value="member1" /> 

    <input type="hidden" name="hfmem1" id="hfmem1" value="1" /> 

       </form> 
<input id="chk2" name="chk2" type="checkbox" value="true" /> 

<form action="/Home/Delete" method="post"> 

    <input type="submit" class="submitLink" value="member2" /> 

    <input type="hidden" name="hfmem2" id="hfmem2" value="2" /> 

       </form> 


      </form> 

La siguiente no está funcionando. pero si escribo mi código que hace que la forma de esta manera

<form action="/Home/MutipleDelete" method="post"> 

<input class="button " name="Compare" type="submit" value="Mutipledelete" style="margin-right:132px;" /> 
</form> 
<input id="chk1" name="chk1" type="checkbox" value="true" /> 

<form action="/Home/Delete" method="post"> 

    <input type="submit" class="submitLink" value="member1" /> 

    <input type="hidden" name="hfmem1" id="hfmem1" value="1" /> 

       </form> 
<input id="chk2" name="chk2" type="checkbox" value="true" /> 

<form action="/Home/Delete" method="post"> 

    <input type="submit" class="submitLink" value="member2" /> 

    <input type="hidden" name="hfmem2" id="hfmem2" value="2" /> 

       </form> 

se está trabajando en Mozilla, pero no en IE.I han de depuración y los valores comprobados en FormCollection En contoller.What que hacer.?

Respuesta

4

Anidamiento de forms is not allowed y puede dar lugar a un comportamiento indefinido entre los navegadores.

2

Conceptualmente, un formulario dentro de un formulario realmente no tiene sentido. ¿No puedes usar Action Links en lugar de los botones en los formularios internos? Aún puedes diseñarlos para que se vean como botones.

+0

pero utilizando borrar con el método GET no es una buena idea mencionar también por Stephen Walther http://stephenwalther.com/blog/archive/2009/01 /21/asp.net-mvc-tip-46-ndash-donrsquot-use-delete-links-because.aspx – coolguy97

+1

Ok, ese es un punto justo. En ese caso, creo que debe tomar una decisión, que es la funcionalidad más importante (es menos probable que se pierda si JavaScript está desactivado): Eliminar de forma individual o Eliminar seleccionado. Utilice uno o varios formularios para el más importante y use Ajax para el otro. – pdr

5

En XHTML, un formulario no está permitido y no tiene sentido.

Para lograr lo que estás tratando de hacer, debes usar enlaces/botones simples en tu tabla. Estos podrían, por ejemplo, enviar una solicitud de 'eliminación' a su servidor y, luego de completar satisfactoriamente la solicitud, también eliminar la entrada de la IU usando jQuery.

Ejemplo:

[Authorize] 
    [HttpPost] 
    public JsonResult Delete(Guid id) 
    { 
     // do stuff, delete the item 
     return Json(succeeded ? Id.ToString() : "error"); 
    } 

en la vista

<a href="#" onclick="$.post('/Stuff/Delete/' + id, function(data) { deleteCallback(data); }); return false;">delete</a> 

function deleteCallback(data) 
{ 
    if(data=="error"){ 
    /* error handler for UI */ 
    } 
    else { 
    /*remove the entry from the user interface*/ 
    } 
}; 

Si usted quiere hacer múltiples borrar, no se debe transferir la lista de ID para eliminar el uso de la dirección URL (porque hay una 2k limitación en IE y parece desagradable), pero en su lugar use la siguiente sintaxis:

arrayVariable = new Array(); 
// fill array with ids associated to checked checkboxes' entries 
$.post('/Stuff/Delete/' + id, {'IdsToDelete' : arrayVariable }, function(data) { deleteCallback(data); }); return false;"> 

Esto puede ser automático aliado serializado a una lista .NET real, por lo que solo tendrá que iterar la lista de enteros o GUIDs, o lo que sea que parezcan sus PKs.

EDITAR: Esto todavía está un poco simplificado. Por razones de seguridad, debe protegerse de CSRF (Falsificación de solicitudes entre sitios). Darin proporcionó a great answer how to do that.

Esto agregará el [ValidateAntiForgeryToken] al método del controlador y la vista tendrá que contener algo así como

var token = $('input[name=__RequestVerificationToken]').val(); 
$.post("/YourUrl", { 'IdsToDelete' : arrayVar, '__RequestVerificationToken': token }, function(data) { deleteCallback(data); }); 
+0

gracias por la otra salida, pero ¿cómo puedo lograr la eliminación única y la eliminación mutiple en una página en esta situación, tanto con la publicación. – coolguy97

+0

Para usar la eliminación múltiple, pondría casillas allí. Puede marcar el estado de las casillas usando jquery y transmitir la lista de ID que el usuario desea eliminar. Los enlaces de eliminación simple siguen siendo los mismos entonces. He actualizado la publicación un poco. – mnemosyn

+0

gracias por la respuesta pero no quiero usar ajax allí – coolguy97

0

Por qué no utilizar una sola forma y el uso múltiple de los botones de envío? Debe interpretar cuidadosamente el resultado, pero eso le permite hacerlo sin javascript y sin necesidad de retorcer html.

Puede que necesite leer el Request.Params directamente, pero eso es relativamente fácil de tratar.

<form action="<%= Html.Encode(Url.Action("Delete"))%>"> 
<ul> 
<li>Item 1 <input type="submit" id="<%= IDSafe(item_id) %>" name="<%= IDSafe(item_id2) %>" value="Delete" /></li> 
<li>Item 2 <input type="submit" id="<%= IDSafe(item_id2) %>" name="<%= IDSafe(item_id2) %>" value="Delete" /></li> 
</ul> 
<input type="submit" name="deleteall" value="Delete selected" /> 
</form> 
0

Creo que esto no será posible mediante la publicación. Como utilizamos una publicación, podemos encontrar el botón de envío que se hizo clic pero no podemos encontrar el valor del botón Enviar si queremos mostrar algún valor para mostrarle al usuario y otro valor que queremos enviar a la base de datos.

en este caso, el botón Mi presentar se genera dinámicamente

<input type="submit" name="submitbutton" id="<%= Html.Encode(item.ideletevalue) %>" class="submitLink" value=" <%= Html.Encode(item.deleteitemname)%>"/> 
Cuestiones relacionadas