在cshtml中调用foreach循环时,对象引用未设置为对象的实例

时间:2015-03-04 22:04:46

标签: c# linq model-view-controller foreach tabular

所以我对MVC和开发都很陌生。我想要做的是基本上创建一个用户的单行表视图,以便我可以编辑和更新该行。 (我希望我有意义)

所以我正在使用MVC Razor View,我想在该表中创建一个表并进行编辑,而不使用已经内置到MVC中的CRUD功能。我想对表格视图进行内联编辑。

所以我创建了一个也有局部视图的视图。我也有一个模型和我的存储库。当我运行它时,它表示对象没有设置为对象的实例,它正在谈论我的foreach循环。以下是数据。如果有人可以提供帮助,那将非常感激。我很新,现在只有3个月的编码。

控制器

public ActionResult Index(string id)
        {
            var attendee = (Guid)Membership.GetUser(id).ProviderUserKey;
            CatalogAttendeeModel model = new CatalogAttendeeModel();
            model.getAttendeesList(attendee);
            var catalog = from ca in db.text
                          join a in db.text on ca.textID equals   a.textID
                          where ca.textID== attendee
                          select ca;
            foreach (var item in catalog)
            {
                if (item.IsActive == null)
                {
                    item.IsActive = true;
                }
            }
            return PartialView(); 
        }

索引视图

@model ODT4.Models.CatalogAttendeeModel

<table>
    <thead>
        <tr>
            <th>
                @Html.Label("Catalog")
                @Html.Label("Role")
                @Html.Label("Is Admin")
                @Html.Label("Certificate Printed")
                @Html.Label("Percent Watched")
                @Html.Label("Percent Updated")
                @Html.Label("PI Name")
                @Html.Label("Action")
            </th>
        </tr>
    </thead>
    <tbody>
        @foreach (var row in Model.catalogAttendees) //this is where I get the errormessage
        {
            {
                Html.RenderPartial("CatalogAttendeeSingleRow", row);
            }
        }
    </tbody>
</table>

部分视图

@model ODT4.Models.CatalogAttendeeModel

@{
    <div id = "crud_tableEdit" >
        <table>
            <tr>
                <td>@Html.DisplayFor(m => m.Catalog.CatalogCode)</td>
                <td>@Html.DisplayFor(m => m.StudyRole)</td>
                <td>@Html.DisplayFor(m => m.IsAdmin)</td>
                <td>@Html.DisplayFor(m => m.IsTrainingDocPrinted)</td>
                <td>@Html.DisplayFor(m => m.PercentWatched)</td>
                <td>@Html.DisplayFor(m => m.PercentUpdatedOn)</td>
                <td>@Html.DisplayFor(m => m.PIName)</td>
            </tr>
        </table> 

    </div>

}

CatalogModel

 public List<Catalog_Attendee> catalogAttendees { get; set; }

    public CatalogAttendeeModel()
    {

    }
    public void getAttendeesList(Guid id)
    {
        //catalogAttendees = new List<Catalog_Attendee>();
        CatalogAttendeeRepository rep = new CatalogAttendeeRepository();
        catalogAttendees = rep.getAttendeesAll();
    }

存储库

public List<Catalog_Attendee> getAttendeesAll()
        {
            return db.Catalog_Attendee.ToList();
        }

        public Catalog_Attendee getAttendeeByID(Guid id)
        {
            return db.Catalog_Attendee.FirstOrDefault(i => i.AttendeeID == id);

        }

以下是错误消息:

Server Error in '/' Application.
________________________________________
Object reference not set to an instance of an object. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 

Line 17:     </thead>
Line 18:     <tbody>
Line 19:         @foreach (var row in Model.catalogAttendees)
Line 20:         {
Line 21:             {

1 个答案:

答案 0 :(得分:1)

Model.catalogAttendees为null - 因此是例外。

至于为什么...也许linq表达式没有返回它应该的东西。我没有看到db.text应该是什么,但是我再也没有看到所有的代码。

编辑:此外,您还没有将模型返回到视图。返回PartialView(模型);