2015-04-23 1 views
1

Je remplis une table dans ma vue MVC avec des cases à cocher et je cherchais à utiliser tag-it pour obtenir le même effet que SO. Je me demande simplement s'il y a quelqu'un là-bas qui saura comment incorporer ma méthode foreach avec tag-it de sorte que quand un tag est tapé, il remplit d'abord ce qui vient de ma liste et le rend "sélectionné" si c'est un champ typé choisi.MVC Voir foreach liste avec tag-it (SO style tagging)

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#myTags").tagit(); 
    }); 
</script> 

<ul id="myTags"> 
    <!-- Existing list items will be pre-added to the tags --> 
    <li>Tag1</li> 
    <li>Tag2</li> 
</ul> 

Vue:

<div class="form-group"> 
    <div class="col-md-offset-2 col-md-10"> 
     <table> 
      <tr> 
       @{ 
        int cnt = 0; 
        List<MyBlogger.Models.Tag> tag = ViewBag.Tags; 
        foreach (var tags in tag) 
        { 
         if (cnt++ % 3 == 0) 
        { 
        @:</tr><tr> 
         } 
         @:<td> 
          <input type="checkbox" 
            name="selectedTags" 
            value="@tags.Id" 
            @(Html.Raw(tags.Assigned? "checked=\"checked\"" : "")) /> 
            @tags.Id @: @tags.Name 
         @:</td> 
        } 
        @:</tr> 
       } 
      </table> 
     </div> 
    </div> 
+1

Vous devriez vraiment utiliser un ViewModel approprié pour sortir cette logique de la vue. – br4d

+0

Pourquoi avez-vous supprimé votre dernière question? Je rédigeais une réponse! Vous semblez avoir l'habitude de le faire. –

Répondre

1

À votre avis:

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#myTags").tagit({ 
      availableTags: @ViewBag.AllTags 
     }); 
    }); 
</script> 

<ul id="myTags"> 
    @foreach (var tag in (ViewBag.SelectedTags as List<MyBlogger.Models.Tag>)) 
    { 
      <li>@tag.Name</li> 
    } 
</ul> 

Dans votre contrôleur:

JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
ViewBag.AllTags = serializer.Serialize(context.Tags.ToArray()); 
ViewBag.SelectedTags = context.Tags.Where(w => w.Selected).ToList(); 

En supposant que vous utilisez le contexte de EF et que vous avez une certaine façon pour remplir une liste de tous les tags s ainsi que les étiquettes qui devraient être sélectionnées.