2011-03-28 34 views
10
 <td> 
    <%= Html.ActionLink("Delete", "DeleteUser", new RouteValueDictionary(new {uname=item.UserName}), new { onclick = "return confirm('Are you sure you want to delete this User?');" }) %> 
    </td> 

En Global.asax.csASP.NET MVC Eliminar Enlace de acción con confirmar

routes.MapRoute(
       "DeleteUser", 
       "Account.aspx/DeleteUser/{uname}", 
       new { controller = "Account", action = "DeleteUser", uname = "" } 
      ); 

En ActionContorller.cs

public ActionResult DeleteUser(string uname) 
{ 
    //delete user 
} 

el valor de uname en el controlador está siendo pasado se cuerda vacía("").

+1

Account.aspx? Amigo, esto no es Formas Web. Los tutoriales en ASP.NET/mvc son excelentes: http://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part1-cs – bzlm

+1

En algunas configuraciones (es decir, trabajando con IIS 6) usando .aspx puede ser aceptable para ayudar a IIS a descubrir el enrutamiento para los controladores (consulte http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx), especialmente cuando no tiene acceso para configurar IIS. –

Respuesta

32

Trate de esta manera:

<%= Html.ActionLink(
    "Delete", 
    "DeleteUser", 
    "Account", 
    new { 
     uname = item.UserName 
    }, 
    new { 
     onclick = "return confirm('Are you sure you want to delete this User?');" 
    } 
) %> 

A continuación, asegúrese de que el enlace generado es correcto:

<a href="/Account.aspx/DeleteUser/foo" onclick="return confirm(&#39;Are you sure you want to delete this User?&#39;);">Delete</a> 

También tenga en cuenta que el uso de un verbo GET claro para una acción que modifica el estado en el servidor no es recomendado.

Aquí es lo que te recomendaría:

[HttpDelete] 
public ActionResult DeleteUser(string uname) 
{ 
    //delete user 
} 

y en la vista:

<% using (Html.BeginForm(
    "DeleteUser", 
    "Account", 
    new { uname = item.UserName }, 
    FormMethod.Post, 
    new { id = "myform" }) 
) { %> 
    <%= Html.HttpMethodOverride(HttpVerbs.Delete) %> 
    <input type="submit" value="Delete" /> 
<% } %> 

y en un archivo JavaScript independiente:

$(function() { 
    $('#myform').submit(function() { 
     return confirm('Are you sure you want to delete this User?'); 
    }); 
}); 

También puede considerar la adición de una anti forgery token para proteger esta acción contra CSRF attacks.

+0

@ ashes999, arreglado. Gracias por señalar eso. –

+0

Intenté copiar este ejemplo, tengo un Controlador llamado CalendarController, una vista llamada Calendar y una acción separada llamada DeleteTraffic, utilicé el ejemplo BeginForm que tiene allí, pero cada vez que hago clic en el botón Eliminar, se invoca la acción Calendar(), no el DeleteTraffic(). su ejemplo, ¿la vista se llama DeleteUser? ¿Cómo hago una llamada de envío a otra acción que no sea la acción conectada a la vista? – inifus

Cuestiones relacionadas