视图用来设置个人信息,需要导师选择教课区域。如下代码:
//获取所有授课区域 int cityID = Int32.Parse(Session["TutorJob_City"].ToString()); DistrictR districtR = new DistrictR(GetRequest()); var districts = districtR.Find(m => m.CityID == cityID); if (districts != null) { model.Districts = districts; } else { ModelState.AddModelError("", "获取授课区域失败。" ); }
视图部分如下:
<div class="editor-field"> @foreach(var district in Model.Districts) { <input id="@district.DistrictID" class="ckbDistrict" name="@district.DistrictID" type="checkbox" value="@district.DistrictID" /> <span style="display:inline-block;width:130px"><label for="@district.DistrictID">@district.Name</label></span> } </div>
页面能正确显示去区域信息。提交数据时,如果在control中验证失败,ModelState.AddModelError("","error") return view(model)时,model中的Districts就成null了,返回视图显示教课区域时就报异常了。可在return view(model)之前再执行一次District的查询(就像顶部controler中那样)又觉得有代码冗余,太麻烦。有没有好点的解决方案啊?求指教!!
那就再查一次吧。这会没找到好的方法,那就先实现功能正常,冗余之类的先不管,万一一会灵光一现就有方法了
哈哈 我就是这么做的,先做了个标记,等着你们这些大神们支招呢。。
首先前台View里面一定要做非空验证啊,其次是在控制器里发现验证失败,为什么还要去找数据啊,直接返回啦
给你说两种解决方法吧!
1.在视图中的@foreach(){}前加一层判断
@if(Model.Districts==null){@foreach(){}}
2.在控制器实例化一下
if (districts != null) { model.Districts = districts; }
else { model.Districts = new DistrictR(); ModelState.AddModelError("", "获取授课区域失败。" ); }