'System.Dynamic.DynamicObject'不包含'PropertyName'的定义

时间:2013-08-22 14:15:37

标签: c# asp.net-mvc razor

我遇到了下一个问题:

我正在尝试运行.NET MVC站点以使用ViewBag将一些数据传递给我的View。 这是我设置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'。

我正在使用带有.NET 4.5的Visual Studio 2012和带有.NET 4.0的ApplicationPool的本地IIS服务器。在具有相同配置的另一台计算机上,所有工作都很好,并且不会抛出任何异常。

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

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

2 个答案:

答案 0 :(得分:21)

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

此异常是一种常见的CLR异常。尝试执行以下步骤它将起作用我希望。 打开Visual Studio

  • 调试 - >例外 - > (取消选中)公共语言运行时异常

如果仍然出现问题

  • 工具 - >选项 - >调试(扩展) - >一般 - > (选中)启用Just My Code

希望它有所帮助,它为我工作

Click Here for Detailed Images

答案 1 :(得分:3)

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

  

正如我们在您的评论中看到的那样,您正在另一个控制器中设置ViewBag.Message。 ViewBag仅用于由提供视图的控制器设置的视图的数据。

     

如果你需要从另一个控制器发送它,你应该在action方法中使用一个参数,然后你可以将ViewBag.Message设置为传入的参数。

     

ViewBag RuntimeBinderException (MVC 4, ASPX)