ASP.NET MVC CheckBoxes问题

时间:2010-05-07 19:15:20

标签: asp.net-mvc

存储库

命名空间MvcApplication1.Models {     公共类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();
    } 

}

}

CONTROLLER

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" />

<% } %>  

问题是它无法找到组ID并显示以下错误。解决方案是什么?

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?)

4 个答案:

答案 0 :(得分:3)

尝试使用FindGroups()使用的类型的命名空间,如下所示:

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

或向Web.Config添加命名空间引用或将命名空间添加到页眉。我认为你仍然会遇到与`System.Text.RegularExpressions'的命名空间冲突。

MVC Style Look with LINQ

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

答案 1 :(得分:2)

将您的Group类的命名空间包含在web.config页面/命名空间

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

使用特定于视图的模型而不是通用ViewData,并将组作为模型的属性传递,以便它可以正确地确定类型。

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" /> 
<% } %>  

答案 2 :(得分:1)

我认为您遇到了引用问题,aspx中的代码认为您正在讨论的是System.Text.RegularExpressions.Group,而不是您从ActionResult返回的群组类型,您使用{{1}你需要确保它是你想要的Group,要么删除Group命名空间的使用,要么你需要它,用你的命名空间完全限定System.Text.RegularExpressions

答案 3 :(得分:1)

如果我错了,请纠正我,但看起来这可能是namespace issueGroupSystem.Text.RegularExpressions.Group的范围内,我猜您的回购中有一个名为Group的表。尝试将名称空间放入forloop中的类型声明中,这是您的回购,因此它不会将其与System.Text.RegularExpressions.Group namespace混淆。