8
votes

ASP.NET MVC - peuplement d'une forme de manière dynamique via la base de données

Je porte une application de recherche à partir de Classic ASP à ASP.NET MVC2. L'une des pages HTE est un formulaire de recherche peuplé de manière dynamique qui est divisé en 4 catégories, chacun avec 2 rangées.

Le client est capable de décocher des options pour chacune de ces catégories. Lorsque cela se produit, chaque catégorie est dynamiquement repeuplée de haut en bas, de gauche à droite. La personne qui a programmé la version classique Asp Configurez un sous-programme qui recherchait dans la base de données (qui a un champ booléen pour chaque champ de recherche), puis a renvoyé un tableau. Il a ensuite pris le tableau et a appelé un autre sous-programme qui a bouclé à travers le tableau puis a généré chacune des catégories.

En ce moment, la seule chose à laquelle je peux penser est de créer un modèle contenant des méthodes pour chacun des les catégories, chacune desquelles renvoient une liste. Un exemple simple serait: xxx

alors ce que je pouvais faire est de diviser la liste en fonction de la taille de chaque ligne, puis de boucler à travers chaque liste et appelez un contrôle utilisateur qui est capable de rendre le HTML dynamiquement basé sur un paramètre de nom.

Le problème avec cette technique est que, pour une raison quelconque, on se sent comme je ne le fais pas de la manière la plus simpliste. Pour quiconque lit cela, est-il un moyen plus facile de mettre en œuvre cela?

merci!


4 commentaires

J'ai vu "le" million de fois avant, mais jamais "le" - +1 pour ça! :-)


Malheureusement, je le fais tout le temps :(.


Juste pour résumer et voir si j'ai eu ce droit ... Vous souhaitez créer un formulaire qui répertorie les catégories et chacune de ces catégories dispose d'une liste des articles de catégorie (chacun avec une case à cocher) sous eux. Une fois que vous avez coché l'un de ces éléments de catégorie, il devrait recharger toutes les catégories et leurs articles de catégorie?


@Dave: +1 pour 'the'? boo hoo! (pieds de piétinement) pas juste .. :(


4 Réponses :


0
votes

Que diriez-vous d'ajouter les listes à l'aide de JavaScript (jQuery) sur le côté client si nécessaire? Les données peuvent être remplacées à l'aide d'un appel AJAX. Une fois que tous les champs ont abeille N remplit et que l'utilisateur soumet, la méthode d'action peut prendre tous les paramètres entrants et effectuer une recherche en fonction de celle-ci.


0 commentaires

1
votes

C'est quelque chose que je voulais enquêter pendant un certain temps. Après avoir fait barboter dans des rails, je me suis gâché avec la liaison de vue au modèle.

Il semble qu'il y ait une aide dans l'espace MVC appelé HTML.editorformodel (). Cette aide génère une forme pour le modèle auquel la vue est liée. Je ne sais pas exactement ce qu'il ferait dans votre situation, mais il serait certainement intéressant de voir la production et peut-être peut-être peut-être vous donner des idées pour une mise en œuvre personnelle.

bonne chance!


0 commentaires

1
votes

Voici ce que je recommanderais. Créez un DIV contenant le contenu dynamique et mettez ce contenu dans une vue partielle. Dans ce cas, il y aurait une vue partielle appelée Produits.ASCX

public static class MyViewHelper
{
  public static string RenderPartialToString(ControllerContext context
     , string partialViewName
     , ViewDataDictionary viewData
     , TempDataDictionary tempData)
  {
     ViewEngineResult result = 
        ViewEngines.Engines.FindPartialView(context, partialViewName);

     if (result.View != null)
     {
        StringBuilder sb = new StringBuilder();
        using (StringWriter sw = new StringWriter(sb))
        {
           using (HtmlTextWriter output = new HtmlTextWriter(sw))
           {
              ViewContext viewContext = new ViewContext(
                 context, result.View, viewData, tempData, output);
              result.View.Render(viewContext, output);
           }
        }

        return sb.ToString();
     }

     return String.Empty;
  }
}


1 commentaires

RenderPartalTostring est plutôt lent (je l'utilisais). Lorsque nous avons converti du MVC 1 à 2, nous avons dû vider l'approche RenderPartialtostring. Ajax.beginform est beaucoup plus propre et remplace automatiquement ou ajoute à l'affichage renvoyé par l'action. De plus, vous pouvez exécuter JavaScript après que le nouveau contenu est chargé en place pour tout post-traitement.



0
votes

Je recommande d'utiliser les formulaires AJAX intégrés avec MVC 2. Vous pouvez avoir des contrôles partiels qui construisent sur la base du modèle qui leur est transmis. Votre approche serait quelque chose comme ça, grossièrement:

Premièrement, le contrôleur p> xxx pré>

puis, dans la vue, vous auriez quelque chose comme ça. P> xxx pré>

Maintenant, si vous avez besoin d'une case à cocher pour déclencher la soumission, vous pouvez utiliser un peu jQuery Magic P>

<script type="text/javascript">
    $(function () {
        $('.checkBoxClassSelector').live('change', new function(){
             $('#mySubmitButton').click();
        });
    });
</script>


0 commentaires