2009-12-21 5 views
0

Selon moi, l'appel ci-dessous génère l'URL se terminant par des tâches/Edit, mais je le veux générer l'url Tâches/Modifier/23de reliure et de routage ou un problème de génération url dans Asp.NET applications Mvc

<%= Html.ActionLink<TaskController>("Edit Task", (x) => x.Edit("23"))%> 

dans Global.asax:

string taskController = NameResolver.NameOfController<TaskController>(); 
string editAction = NameResolver.NameOfAction<TaskController>(x => x.Edit(null)); 
routes.MapRoute(
     "EditTasks", 
     "Tasks/Edit/{id}", 
     new { controller = taskController, action = editAction, id = string.Empty }); 

J'ai également un problème de liaison dans cette action. Les valeurs définies à partir de la vue ne sont pas liées à mon paramètre Edit. Il arrive à chaque fois null et je n'ai pas défini DefaultModelBinder n'importe où. Voici l'action d'édition:

public ActionResult Edit (string id) 
    { 
     //retrieve some data and pass it to view and return view 
    } 

Alors, quel peut être le problème ici? Comment puis-je résoudre l'URL et le problème de liaison? Et oui, je suis un débutant Asp.Net Mvc :)

Répondre

3
<%= Html.ActionLink("Task", "Edit", new { id = "2" }) %> 

Bien que votre ID soit une chaîne et non un int?

+0

Merci beaucoup. Pour id chose, ce n'est pas réellement un nombre entier, pour la simplicité je l'ai changé de cette façon dans l'exemple de code. Une autre question: Puis-je utiliser un nom d'action fortement typé, c'est-à-dire pas "Modifier", est-ce que Mvc a une telle utilité? – rovsen

+0

@arch stanton: Je ne vois pas comment vous pouvez utiliser un nom d'action fortement typé car Edit est une méthode qui n'est pas une classe sans avoir à se soucier sérieusement de l'analyse des expressions LINQ. Je vais donner un coup de pouce quand j'ai le temps, mais même si possible, il ne devrait jamais arriver à la production. Ce serait un mauvais hack qui n'est pas maintenable. –

+0

J'ai entendu MvcContrib prend en charge ces utilisations fortement typées comme Html.ActionLink ("Modifier la tâche", (x) => x.Edit ("23")). Mais pas essayé moi-même. – rovsen