Asp.net mvc 4 对象引用未设置为mvc4中对象的实例

Asp.net mvc 4 对象引用未设置为mvc4中对象的实例,asp.net-mvc-4,Asp.net Mvc 4,*我有这样的模型课: public class Timesheetmodel { ResLandEntities res = new ResLandEntities(); public int WEEK_CAL_ID { get; set; } public int COMP_ID { get; set; } public int RES_ID { get; set; } public int PROJ_ID { get; set; } publi

*我有这样的模型课:

public class Timesheetmodel
 {
    ResLandEntities res = new ResLandEntities();
   public int WEEK_CAL_ID { get; set; }
    public int COMP_ID { get; set; }
    public int RES_ID { get; set; }
    public int PROJ_ID { get; set; }
    public string DESCR { get; set; }
    public int SUN_HRS { get; set; }
    public int MON_HRS { get; set; }
    public int TUE_HRS { get; set; }
    public int WED_HRS { get; set; }
    public int THU_HRS { get; set; }
    public int FRI_HRS { get; set; }
    public int SAT_HRS { get; set; }

    public string IS_DELETED { get; set; }
    public string CR_BY { get; set; }
    public DateTime DT_CR { get; set; }
    public string MOD_BY { get; set; }
    public DateTime DT_MOD { get; set; }

    public List<Timesheetmodel> GetTimeSheetDetails { get; set; }


}
我把每件事都安排得很完美,但把错误表现得很明显

“对象引用未设置为对象的引用”


我犯了一个错误。请任何人帮助我。

该模型正通过

TextBoxFor( m => m.GetTimeSheetDetails[ i ].XXX_HRS
在视图中调用,这样就不会出现问题

我遇到的“对象引用未设置为对象实例”错误是在视图中没有任何时间表详细输入的情况下单击更新按钮(当会话[“计数”]==0时)。原因是DefaultModelBinder在发布的表单值中搜索要绑定到模型的数据,但找不到任何数据,因为视图中不存在输入。因此

objts.GetTimeSheetDetails
没有任何值绑定到它,并且保持为空

如果没有类似的项目,我建议考虑删除视图中的更新按钮

@if( 0 < Convert.ToInt32(Session[ "count" ] )
{
    <tr>
        <td><input type="submit" value="Update" class="btnstyle" name="btn" /></td>
    </tr>
}
@if(0
问题在于,您不能像这样将列表传递给服务器。实际上,您所做的只是为列表中的每个值呈现一个文本框,但没有id,更不用说唯一id了。换句话说,一旦呈现这些文本框,绑定就会丢失。表单帖子需要作为关键表单数据发送回服务器值对;此设计打破了这一点,因此控制器无法将值绑定/反序列化回viewmodel属性,因此它最终为null


如果您考虑@Html.EditorFor(m=>m.GetTimeSheetDetails),MVC可以帮助您实现这一点这将以预期的格式为每个控件分配一个唯一的ID,该ID可以传递给操作并反序列化回一个适当的列表。这将使表布局复杂化,但这可以通过css解决。

IMO您可以吸引更多的用户跟随。GetTimeSheetDetails似乎不会在任何地方初始化。Yo你不能迭代一个不存在的列表。我已经在视图中为所有文本框使用GetTimesheetDetails将值发送到模型,但不将值发送到模型。是否有任何解决方案可以解决这个问题?你似乎遗漏了一些视图代码。正在构建的表是否包装在表单标记中?(@using(Html.BeginForm(…){…}是的,我使用了表单标签,它应该可以工作,但不是吗?明白了。MVC的问题非常敏感,如果在任何影响整个页面的视图中存在任何错误。这里是会话[“count”]的问题,但已解决。谢谢@Anthony Longano,您的回答帮助我解决了我的问题。
objts.GetTimeSheetDetails
@if( 0 < Convert.ToInt32(Session[ "count" ] )
{
    <tr>
        <td><input type="submit" value="Update" class="btnstyle" name="btn" /></td>
    </tr>
}