2017-10-11 12 views
0

Cela a été demandé avant, mais je vais être plus précis avec ma question, espérons obtenir une meilleure réponse:Comment ajouter un nouveau menu à un projet basé sur aspnetboilerplate?

J'ai compris comment ajouter des vues à la classe pagenames:

public const string WorkOrders = "WorkOrders"; 

puis à la classe projectNavigationProvider pour les amener dans la barre de navigation:

  .AddItem(
      new MenuItemDefinition(
        PageNames.WorkOrders, 
        L("WorkOrders"), 
        url: "WorkOrders", 
        icon: "business", 
        requiredPermissionName: PermissionNames.Pages_WorkOrders 
       ) 

pour obtenir mes vues principales ajoutée à la principale barre de navigation et fonctionne correctement.

Cependant, je n'ai pas compris comment créer un menu totalement nouveau pour être utilisé ailleurs. Dans l'application sur laquelle je travaille, nous avons plusieurs pages qui affichent tous les enregistrements dans un tableau particulier, les ordres de travail par exemple. Mais chaque enregistrement de chaque table doit avoir plusieurs liens vers d'autres pages pour créer, éditer, détailler et supprimer.

Un de mes partenaires semble avoir résolu ce problème sur d'autres pages en utilisant des appels modaux et ajax aux points de terminaison des contrôleurs. Cela fonctionne bien pour les clients, qui ne nécessitent que le nom et les informations de contact, mais je ne pense pas qu'un modal fonctionnera pour créer, visualiser ou éditer un bon de travail car il faut ajouter des éléments de campagne et les données associées pour chacun d'entre eux etc ... Il y a beaucoup de choses. Enfin, il ne semble pas que le modèle soit configuré pour être utilisé car il a écrit beaucoup de ses propres j pour le faire fonctionner.

Actuellement, les vues de création, d'édition et de détails existent et j'ai des liens vers elles à côté de chaque enregistrement, mais j'obtiens des erreurs lorsque j'essaie d'utiliser le lien. Peut-être que je ne comprends pas comment fonctionne le routage? Dans le modèle mvc normal de VS, les liens ont des propriétés pour spécifier le contrôleur et la méthode et mvc gère le reste.

<a asp-action="Edit" asp-route-id="@item.WorkOrderID">Edit</a> | 
<a asp-action="Details" asp-route-id="@item.WorkOrderID">Details</a> | 
<a asp-action="Delete" asp-route-id="@item.WorkOrderID">Delete</a> 

Je reçois la même erreur que j'avais en essayant d'obtenir la page Commandes de travail pour charger mais n'avait pas ajouté à pagenames ou navigationprovider, ce qui me fait que j'ai juste besoin d'ajouter les liens vers la navigationprovider classe mais je ne veux pas un lien la page WordOrders créer dans le menu principal, je le veux sur un mini-menu à côté de l'enregistrement correspondant. J'ai ajouté la page à la classe pagenames mais je ne suis pas sûr de savoir comment créer un menu séparé pour ma page principale.

public const string CreateWorkOrders = "CreateWorkOrders"; 

En examinant la classe navigationprovider je vois:

context.Manager.MainMenu 

et je pense que je dois être en mesure de créer un autre menu et ajouter des éléments comme celui-ci:

context.Manager.NewMenu.AddItem(.... 

mais il semble que MainMenu soit référencé dans une classe que je ne peux pas trouver ou éditer. Devrais-je créer une autre classe définissant le nouveau menu afin que je puisse le configurer dans la classe navigationprovider existante ou devrais-je créer une classe de fournisseur de navigation séparée pour cela? J'espère que j'ai convaincu tout le monde qui regarde cela que j'ai fait beaucoup de recherches avant de demander de l'aide. Même un lien vers une documentation plus détaillée serait utile.

+0

set solution que répondre @ Aaron acceptée si elle fonctionne. –

Répondre

0

Vous pouvez ajouter un nouveau menu comme ceci:

context.Manager.Menus.Add(WorkOrders, new MenuDefinition(WorkOrders, L(WorkOrders))); 

Utilisation:

context.Manager.Menus[WorkOrders].AddItem(...) 
+0

Intellisense me dit que 'WorkOrders' n'existe pas dans le contexte actuel. De même que l'argument doit être .Add (clé de chaîne, valeur MenuDefinition); Cela ne signifie-t-il pas que je devrais être en mesure d'utiliser n'importe quelle chaîne que je veux? –

+0

N'avez-vous pas défini 'const string WorkOrders =" WorkOrders "'? – aaron

+0

Je l'ai fait. Utilisation: context.Manager.Menus.Add (PageNames.WorkOrders, nouvelle définition de menu (PageNames.WorkOrders, L (PageNames.WorkOrders))); Semble fonctionner. Je vais continuer et voir comment ça se passe. –