Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 3 代码与新MVC 3 ViewBag签订合同 公共类HomeController:控制器 { 公共行动结果索引() { //警告19 CodeContracts:可能在空引用“Website.Controllers.HomeController.o__SiteContainer0.p__Site2.Target”HomeController.cs上调用方法 如果(ViewBag!=null) { ViewBag.Message=“不朽”; } 返回视图(); } 关于()的公共行动结果 { 返回视图(); } }_Asp.net Mvc 3_Razor_Code Contracts_Microsoft Contracts - Fatal编程技术网

Asp.net mvc 3 代码与新MVC 3 ViewBag签订合同 公共类HomeController:控制器 { 公共行动结果索引() { //警告19 CodeContracts:可能在空引用“Website.Controllers.HomeController.o__SiteContainer0.p__Site2.Target”HomeController.cs上调用方法 如果(ViewBag!=null) { ViewBag.Message=“不朽”; } 返回视图(); } 关于()的公共行动结果 { 返回视图(); } }

Asp.net mvc 3 代码与新MVC 3 ViewBag签订合同 公共类HomeController:控制器 { 公共行动结果索引() { //警告19 CodeContracts:可能在空引用“Website.Controllers.HomeController.o__SiteContainer0.p__Site2.Target”HomeController.cs上调用方法 如果(ViewBag!=null) { ViewBag.Message=“不朽”; } 返回视图(); } 关于()的公共行动结果 { 返回视图(); } },asp.net-mvc-3,razor,code-contracts,microsoft-contracts,Asp.net Mvc 3,Razor,Code Contracts,Microsoft Contracts,绞尽脑汁想弄清楚如何满足MVC3中ViewBag的[X]隐式非空义务。是否有人想出了一种方法,使代码契约与新的动态ViewBag类型相协调 我希望能够将ViewBag包装在基本控制器中,如ViewBagSafe等 我确实意识到这并不是项目的真正问题,因为ViewBag永远不会为null,但我希望保留代码契约,保留默认的null检查,以防将来出现错误(并且仍然能够在没有警告的情况下进行编译,以便我可以轻松地识别自己违反契约的代码)。我跟踪了这个问题。它与动态成员查找的初始化逻辑和C#编译器发出的静

绞尽脑汁想弄清楚如何满足MVC3中ViewBag的[X]隐式非空义务。是否有人想出了一种方法,使代码契约与新的动态ViewBag类型相协调

我希望能够将ViewBag包装在基本控制器中,如ViewBagSafe等


我确实意识到这并不是项目的真正问题,因为ViewBag永远不会为null,但我希望保留代码契约,保留默认的null检查,以防将来出现错误(并且仍然能够在没有警告的情况下进行编译,以便我可以轻松地识别自己违反契约的代码)。

我跟踪了这个问题。它与动态成员查找的初始化逻辑和C#编译器发出的静态缓存字段有关。我必须教cccheck这些,并在System.Core.dll中的缓存类中添加一些契约。下一版本不应再对动态访问成员发出这些警告。感谢您提出此问题。

原因很清楚,ViewBag是动态的。我没有答案,但是寻找CC+Dynamic会得到比CC+MVCGood想象的更多的结果。将完善我的谷歌搜索,如果我找到解决方案,肯定会发布。现在,我必须关闭DBC属性页上的Null检查。如果代码契约允许我们完全忽略动态类型,那就太好了。事实上,现在我记得这句话“谢谢,是的,我们需要做一些工作来识别这个模式,或者隐式地拥有一些关于这些助手字段/方法的契约。”所以不允许我发布链接,但你肯定可以用谷歌搜索该语句……该死。谢谢Henk,答案是…目前还没有答案,但如果CC更新提供了解决方案,我们将保留此选项。
    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();
    }
}