Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.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
C# ';System.Dynamic.DynamicObject';不包含';PropertyName';_C#_Asp.net Mvc_Razor - Fatal编程技术网

C# ';System.Dynamic.DynamicObject';不包含';PropertyName';

C# ';System.Dynamic.DynamicObject';不包含';PropertyName';,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我面临着下一个问题: 我正在尝试运行.NETMVC站点以使用ViewBag将一些数据传递给我的视图。 下面是我设置VeiwBag的方法 [HttpGet] [AllowAnonymous] public ActionResult Start() { ViewBag.BanReason = null; int userId; //Request with UserId, display ban reason if necessary if (Request.Par

我面临着下一个问题:

我正在尝试运行.NETMVC站点以使用ViewBag将一些数据传递给我的视图。 下面是我设置VeiwBag的方法

[HttpGet]
[AllowAnonymous]
public ActionResult Start()
{
    ViewBag.BanReason = null;
    int userId;

    //Request with UserId, display ban reason if necessary
    if (Request.Params["UserId"] != null && int.TryParse(Request.Params["UserId"], out userId))
    {
        ViewBag.BanReason = CheckIfUserBanned(userId);
    }

    ViewBag.Users = MvcApplication.Users;

    return View();
}
当我给ViewBag赋值时(例如ViewBag.BanReason=null;),我得到了消息中的RuntimeBinderException

“System.Dynamic.DynamicObject”不包含的定义 “BanReason”

我将Visual Studio 2012与.NET 4.5一起使用,将本地IIS服务器与ApplicationPool一起与.NET 4.0一起使用。在另一台具有相同配置的计算机上,所有这些都可以很好地工作,并且不会引发异常

请不要建议使用其他技术,如ViewData[“”]和创建单独的模型,我不想更改在其他机器上运行良好的代码

我认为这是配置问题。任何猜测都将不胜感激。
谢谢

我相信这是另一个stackoverflow答案中的问题:

从您的评论中可以看出,您正在另一个控制器中设置ViewBag.Message。ViewBag仅用于服务于视图的控制器设置的视图数据

如果需要从其他控制器发送,则应在操作方法中使用参数,然后可以将ViewBag.Message设置为传入的参数


您的代码很好,ViewBag具有动态属性,并且在运行时分配了所有属性

此异常是常见的CLR异常。。尝试执行以下步骤,我希望它会起作用。 开放式Visual Studio

  • 调试-->异常-->(取消选中)公共语言运行时异常
如果仍然出现问题

  • 工具-->选项-->调试(展开)-->常规-->(检查)仅启用我的代码
希望它能帮上忙,它对我有用


向我们展示您在哪里使用的代码
ViewBag.BanReason
它在Start.cshtml@if(ViewBag.BanReason!=null){showErrorPanel(“@ViewBag.BanReason”);}中使用的代码。您可以发布堆栈跟踪吗?您仍然会得到相同的异常?是的,我仍然明白。不过我认为这里的核心问题是,DynamicObject像if/else一样使用try/catch,它不能扩展性能,它会破坏您的CPU,尤其是在循环中。@KellyElton我同意。CLR似乎有一个习惯,即内部依赖“预期”异常。这是一个相当令人担忧的设计实践,当您因其他原因无法启用“仅我的代码”时,调试成为一个主要的PITA。在Visual Studio 2017中,您还可以转到:调试->选项,并在选项弹出窗口中转到调试->常规,选中“仅启用我的代码”旁边的框