Question

Quelqu'un peut-il me dire pourquoi devrais-je utiliser la non-action? Je veux dire que j'ai un formulaire avec plusieurs valeurs de soumission: mettre à jour, supprimer ou insérer. Étant donné que tous les boutons de soumission ont le même formulaire en commun, je change la valeur de soumission dans le contrôleur et agit en conséquence.

Comme ça:

public ActionResult asd(string submitButton){
     switch(submitButton){
         case "Insert":
             return Insert();
         // bla bla bla
     }
}

[NonAction]
public ActionResult Insert(){
    // some code inside here
    return View();
}

Encore une fois, pourquoi devrais-je utiliser la non-action au lieu de quelque chose comme ceci:

public void Insert(){
    // some code inside here
}
Était-ce utile?

La solution

Vous pouvez omettre le NonAction Attribut mais la méthode est toujours invoquable en tant que méthode d'action.

À partir du site MSDN (référence):

Par défaut, le cadre MVC traite toutes les méthodes publiques d'une classe de contrôleur comme méthodes d'action. Si votre classe de contrôleur contient une méthode publique et que vous ne voulez pas que ce soit une méthode d'action, vous devez marquer cette méthode avec l'attribut non actionAttribute.

Autres conseils

Il convient de noter que la nécessité d'utiliser [NonAction] ne s'applique qu'aux méthodes publiques. Les méthodes protégées et privées ne sont pas traitées comme des actions. Depuis votre Update/Delete/Insert Les méthodes sont des aides pour asd(), une méthode privée serait plus appropriée pour votre scénario:

public ActionResult asd(string submitButton){
    switch(submitButton){
        case "Insert":
            return Insert();
        // bla bla bla
    }
}

ActionResult Insert(){
    // some code inside here
}

Si vous n'utilisez pas l'attribut [non-action], quelqu'un peut appeler votre action directement au lieu d'avoir à passer par la fonction «ASD»

Lire l'article de Haack

Toute méthode publique dans une classe de contrôleur est appelée via URL.

Parfois, vous devrez peut-être éviter cela. Par exemple, si vous implémentez une interface et que vous ne voudrez peut-être pas appeler cette méthode publique, vous pouvez marquer comme NonAction

public interface IEmployee
{
 void Save(Employee e);
 bool Validate(Employee e);
}

public class EmployeeController:Controller, IEmployee
{
  public void Save(Employee e){
  }

  [NonAction]
  public void Validate(Employee e){
  }
}

Je viens d'utiliser [non-action] dans notre API Web, pour décorer un tas de méthodes de contrôleur (points de terminaison) parce que nous avions une décision de dernière minute pour reporter la livraison des critères de terminaison spécifiques.

Il est donc utile, si vous souhaitez éviter d'exposer un point de terminaison de l'API, mais que vous souhaitez toujours maintenir l'implémentation pour plus tard.

J'ai donc utilisé cet attribut et cela m'a fait gagner beaucoup de temps.

Je vais simplement le supprimer dans la prochaine version et ce sera simplement là!

L'attribut de non-action rend une action non accessible à partir de la barre de navigation. Par exemple, si vous avez une action qui supprime les éléments dans la base de données, vous devez ajouter le NonAction attribut pour le rendre non accessible par les utilisateurs.

Tout d'abord, pensez à un ActionResult simplement comme un type particulier de construction qui est renvoyé par MVC, qui se trouve une commodité particulière en termes de façon dont ActionResult peut être gérée en interne dans le cadre MVC. Donc le fait que quelque chose soit une action de l'action n'a pas signifie nécessairement "Cela devrait être accessible au public". En réalité, Toute méthode publique dans un contrôleur MVC sera traitée comme une méthode d'action, qu'elle renvoie ou non un ActionResult.

Donc, il suffit d'avoir un type de retour qui not Un ActionResult Will ne pas Empêcher nécessairement cette méthode d'être exposée comme une action accessible au public qui peut être appelée via une URL.

Il peut y avoir de nombreuses raisons pour lesquelles vous ne souhaitez pas exposer une méthode en tant qu'action qui peut être invoquée via une URL, et dans le cas où vous souhaitez «protéger» contre cela, c'est à ce moment que vous utilisez l'attribut [non-action '].

Cela indique qu'une méthode de contrôleur n'est pas une méthode d'action. Exemple: [non-action] public void Indextest () {// faire quelque chose} C'est un attribut très utile lorsque la visibilité de la méthode du contrôleur ne peut pas être changée en privé.

C'est un attribut qui est utilisé sur les méthodes définies par les modificateurs d'accès public. En fait, MVC Framework traite toutes les méthodes publiques comme des URL, mais au cas où vous ne le souhaitez pas, vous devez décorer une méthode avec l'attribut non d'action. La même chose peut être réalisée en rendant la méthode privée.

Un exemple d'attribut de non-action est donné ci-dessous.http://yogeshdotnet.com/non-action-attribute-in-mvc/

Si vous ne vouliez pas invoquer certaines méthodes d'action, vous devez le marquer avec un attribut [NonAction] ou en le faisant privé

public ActionResult Index(){
    return View();
}

[NonAction]
public ActionResult Countries(List<string>countries){
    return View(countries);
}

vous pouvez copier le code et le coller et voir le résultat. Merci

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top