Obtenir une action du contrôleur en utilisant une expression lambda

asp.net-mvc c# expression-trees

Question

J'essaie de créer une méthode qui crée une URL basée sur le nom de contrôleur et le nom d'acteur. Je ne veux pas utiliser de chaînes magiques, alors je pensais à une méthode prenant une expression lambda en tant que paramètre.

La difficulté réside dans le fait que je ne souhaite spécifier aucun paramètre pour la méthode d’action. Donc, par exemple, si j'ai ce contrôleur:

public class HomeController : IController
{
  public Index(int Id)
  {
     ..
  }
}

Je voudrais appeler la méthode comme ceci:

public class HomeController : IController
{
  public Index(int Id)
  {
     ..
  }
}

La signature de la méthode que j'ai proposée est:

public class HomeController : IController
{
  public Index(int Id)
  {
     ..
  }
}

Mais cela ne résout pas le problème de sauter les paramètres. Ma méthode ne peut être appelée avec le paramètre spécifié comme ceci:

public class HomeController : IController
{
  public Index(int Id)
  {
     ..
  }
}

Est-il possible de spécifier une action ou une méthode sur un contrôleur sans avoir à définir les paramètres?

Réponse acceptée

Il n'est pas possible d'omettre les paramètres avec une arborescence d'expression sauf si vous avez des paramètres facultatifs ou par défaut dans vos méthodes d'action. Etant donné que les arbres d'expression peuvent être compilés en code exécutable, l'expression est toujours validée par le compilateur, elle doit donc être valide pour les paramètres de la méthode code.

Comme dans l'exemple de Dan ci-dessous, la fourniture d'un paramètre par défaut est aussi simple que:

public ActionResult Index(int Id = 0)

De plus, étant donné que les méthodes d'action doivent renvoyer une sorte de résultat, votre expression doit être de type Expression<Func<TController, object>> , ce qui permettra de Expression<Func<TController, object>> tout type d'objet à partir de la méthode définie dans l'expression.

Vérifiez définitivement MVCContrib .


Réponse populaire

Utilisez T4MVC . C'est la meilleure option pour supprimer toutes les chaînes magiques et faire beaucoup plus




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi