2017-02-21 4 views
0

J'ai créé une page de registre avec un formulaire dynamique dans Orchard CMS, et j'ai reçu de nouvelles exigences pour vérifier le nombre d'enregistrements.Comment obtenir le nombre d'enregistrements de soumission de formulaire dynamique dans Orchard CMS

Je n'ai aucune idée sur la façon de faire cela, j'ai regardé dans le dossier SubmissionAdminController.cs dans Orchard.DynamicForms.Controllers, mais je ne pouvais toujours pas trouver un moyen.

Je pense pour obtenir le nombre d'enregistrements de ma cshtml page vue et vérifier dans différentes parties, est-il possible?

Répondre

0

Pour obtenir le nombre d'enregistrements des soumissions stockées, injectez ou résolvez un IRepository<Submission> et utilisez la méthode Count() pour compter tous les éléments. Notez que la méthode Count() accepte une expression, ce qui vous permet de filtrer par nom de formulaire par exemple. Pour référence, c'est ce que la classe Submission ressemble:

namespace Orchard.DynamicForms.Models { 
    public class Submission { 
     public virtual int Id { get; set; } 
     public virtual string FormName { get; set; } 

     [StringLengthMax] 
     public virtual string FormData { get; set; } 
     public virtual DateTime CreatedUtc { get; set; } 
    } 
} 

Lorsque vous avez un IRepository<Submission>, c'est comment vous comptez toutes les soumissions sous une forme appelée « MyForm »:

var count = submissionRepository.Count(x => x.FormName == "MyForm"); 

Si vous ne pas avoir un contrôleur ou d'une partie personnalisée ou quoi que ce soit d'injecter cette IRepository dans, alors vous pouvez résoudre le référentiel forme directement votre point de vue comme celui-ci:

@{ 
    var submissionRepository = WorkContext.Resolve<IRepository<Submission>>(); 
    var submissionCount = submissionRepository.Count(x => x.FormName == "MyForm"); 
} 

Assurez-vous d'importer les espaces de noms propres:

  • Orchard.DynamicForms.Models pour Submission
  • Orchard.Data pour IRepository<T>

Cependant, si vous avez besoin d'afficher ce numéro dans plusieurs endroits, il est préférable de créer une forme si que vous pouvez le réutiliser. Mieux encore serait de ne pas résoudre le référentiel à partir du modèle de forme directement, mais via un IShapeTableProvider. La principale raison qui devient clair lorsque vous démarrez votre modèle de remplaçant forme ou commencez à fournir alterne forme, aussi bien dans quels cas vous aurez une logique double dans tous vos modèles de forme, ce qui est pas très sec bien sûr. Et il y a le problème plus philosophique de la séparation des préoccupations: vous ne voulez pas de code d'accès aux données dans vos vues. Au contraire, utilisez ce code à partir d'un contrôleur, d'un pilote ou d'un fournisseur de table de formes.

+0

Un grand merci Spike, vous avez sauvé ma journée! –

+0

Vous devez accorder la réponse alors;) –

+0

Je suis désolé que je cliqué sur le bouton utile jusqu'à mais sans réputation assez. –