2010-05-07 4 views
3

RepositoryASP.NET MVC CheckBoxes Problème

MvcApplication1.Models espace de noms { public class GroupRepository { EgovtDataContext db = new EgovtDataContext();

public IQueryable<Group> FindAllGroups() 
    { 
    return db.Groups; 
    } 

    public IQueryable<Group> FindGroups() 
    { 
     return from Group in FindAllGroups() 
       orderby Group 
       select Group; 
    } 



    public Group GetGroups(int id) 
    { 
     return db.Groups.SingleOrDefault(d => d.int_GroupId == id); 
    } 

    // 


    public void Add(Group group) 
    { 
     db.Groups.InsertOnSubmit(group); 
    } 

    public void Delete(Group group) 
    { 

     db.Groups.DeleteOnSubmit(group); 
    } 

    // 
    // Persistence 

    public void Save() 
    { 
     db.SubmitChanges(); 
    } 

} 

}

CONTRÔLEUR

public ActionResult Index() 
    { 

     GroupRepository grouprepository = new GroupRepository(); 

     ViewData["Group"] = grouprepository.FindGroups(); 

     return View(); 

    } 

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage" %> 


<% foreach (Group i in ViewData["Group"] as List<Group>) 

{ %> 

    <input type="checkbox" name="Inhoud" 
      value="<%= i.int_GroupId %>" checked="checked" /> 

<% } %> 

La chose est qu'il ne peut pas trouver l'identifiant de groupe et d'afficher l'erreur suivante. Quelle est la solution?

CS1061: 'System.Text.RegularExpressions.Group' does not contain a definition 
for 'int_GroupId' and no extension method 'int_GroupId' accepting a first 
argument of type 'System.Text.RegularExpressions.Group' could be found 
(are you missing a using directive or an assembly reference?)
+0

Que FindGroups() renvoie-t-il? Y a-t-il du html manquant? – hunter

+0

public IQueryable FindGroups() { retour de Group dans FindAllGroups() par groupe select Groupe; } – maztt

+0

Quel est l'espace de noms de Group? Je suppose que ce n'est pas 'System.Text.RegularExpressions.Group' – hunter

Répondre

3

essayer d'utiliser l'espace de noms du type vos FindGroups() utilise comme ceci:

<% foreach (var i in ViewData["Group"] as List<MyNamespace.Blah.Group>) 
    { %> 
     <input type="checkbox" name="Inhoud" 
       value="<%= i.int_GroupId %>" checked="checked" /> 
<% } %> 

ou ajouter une référence d'espace de noms à votre web.config ou ajouter l'espace de noms à votre tête de page. Je pense que vous aurez toujours un conflit d'espace de noms avec `System.Text.RegularExpressions '.

MVC style look avec LINQ

(ViewData["Group"] as List<MyNamespace.Blah.Group>) 
    .ForEach(g => Response.Write(
     Html.CheckBox("Inhoud", true, new { value = g.int_GroupId }))); 
+0

D'où vient le' .ForEach'? Est-ce une méthode d'extension que vous avez collée sur IEnumerable? –

+0

Oh, désolé. Ici: http://msdn.microsoft.com/en-us/library/bwabdf9z.aspx. Très agréable. –

+0

merci! Je ne sais pas si c'est plus lisible mais ça a l'air joli et rend une case à cocher comme MVC vous le demande. – hunter

1

Je pense que vous avez un problème de référence, le code dans le ASPX pense que vous parlez System.Text.RegularExpressions.Group plutôt que le type de groupe que vous revenez de votre ActionResult, où vous utilisez Group, vous devrez vous assurer qu'il est le Group que vous voulez, soit supprimer l'aide de pour l'espace de noms System.Text.RegularExpressions, ou si vous avez besoin que, qualifier complètement Group avec votre espace de noms

1

-moi si je me trompe, mais regards comme ceci peut être un namespace issue. Group est dans le domaine de System.Text.RegularExpressions.Group, et je suppose que vous avez une table dans votre repos qui s'appelle Groupe. Essayez de placer l'espace de noms dans la déclaration de type dans votre forloop, c'est-à-dire de vos repos, afin de ne pas le confondre avec le System.Text.RegularExpressions.Groupnamespace.

2

Inclure votre espace de noms pour votre classe de groupe à vos pages web.config/namespaces

<pages> 
    <namespaces> 
     ... 
     <add namespace="Com.Example.Foo.Interfaces" /> 
     <add namespace="Com.Example.Foo.Common" /> 
     ... 
    </namespaces> 
    </pages 

Utilisez un modèle spécifique à la vue au lieu de ViewData générique et passer des groupes comme propriété du modèle afin qu'il puisse correctement déterminer le type.

using Com.Example.Foo.Interfaces; 
using Com.Example.Foo.Common; 

public class GroupModel 
{ 
    public IEnumerable<Group> Groups { get; set; } 
} 

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<GroupModel>" %> 

<% foreach (var i in Model.Groups) 
    { %> 
     <input type="checkbox" name="Inhoud" 
       value="<%= i.int_GroupId %>" checked="checked" /> 
<% } %>