【发布时间】:2011-07-04 13:24:07
【问题描述】:
public class HomeController : Controller
{
public ActionResult Index()
{
// Warning 19 CodeContracts: Possibly calling a method on a null reference 'Website.Controllers.HomeController.<Index>o__SiteContainer0.<>p__Site2.Target' HomeController.cs
if (ViewBag != null)
{
ViewBag.Message = "Be Immortal";
}
return View();
}
public ActionResult About()
{
return View();
}
}
绞尽脑汁想弄清楚如何在 MVC 3 中满足 ViewBag 的 [X] 隐式非 Null 义务。有没有人想出一种方法来使代码合同与新的动态 ViewBag 类型相匹配?
我希望能够将 ViewBag 作为 ViewBagSafe 等包装在基本控制器中。
我确实意识到这对项目来说并不是一个真正的问题,因为 ViewBag 永远不会为空,但我想保留代码合同,默认为空检查,以防我将来出现失误(并且仍然能够编译时没有警告,以便我可以轻松识别我自己的违反合同的编码)。
【问题讨论】:
-
原因很清楚,ViewBag 是动态的。我没有答案,但寻找 CC+Dynamic 会比 CC+MVC 提供更多结果
-
好主意。如果我找到解决方案,将改进我的谷歌搜索并肯定会发布。现在,我不得不关闭 DBC 属性页上的 Null 检查。如果代码契约允许我们完全忽略动态类型,那就太好了。
-
实际上 - 现在我记得这条评论“谢谢,是的,我们需要做一些工作来识别这种模式,或者隐含地与这些辅助字段/方法签订一些合同。”所以不让我发布链接,但你当然可以谷歌该声明......该死。谢谢 Henk,答案是……目前还没有答案,但如果 CC 更新提供了解决方案,它将保持开放状态。
标签: asp.net-mvc-3 razor code-contracts microsoft-contracts