2013-08-22 75 views
19

我面临的下一个问题:“System.Dynamic.DynamicObject”不包含定义“属性名”

我试图运行.NET MVC站点使用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;)我有与该消息

'System.Dynamic.DynamicObject' 的RuntimeBinderException不包含定义为 'BanReason'。

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

请不要建议使用其他技术,如ViewData [“”]和创建一个单独的模型,我不想改变在另一台机器上很好地工作的代码。

我认为这是miss-configuration问题。任何猜测将不胜感激。 感谢

+0

你在哪里使用'ViewBag.BanReason' – Satpal

+0

它使用在Start.cshtml @if(ViewBag.BanReason我们展示的代码!= null) { } – Groove

+1

你可以发布堆栈跟踪吗? – Slavo

回答

3

我相信这是从另一个计算器的回答您的问题:

我们可以通过您的意见看,您正在设置ViewBag.Message的另一个控制器。 ViewBag仅适用于由服务于视图的控制器设置的视图的数据。

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

ViewBag RuntimeBinderException (MVC 4, ASPX)

+0

我试过了,它没有帮助。仍然有同样的错误。 – Groove

+0

你仍然得到相同的异常? –

+0

是的,我仍然得到它。 – Groove

16

你的代码是好的,ViewBag是有一个动态属性,并在运行时的所有属性都被分配。

这个异常是一个常见的CLR异常..尝试做下面的步骤,它将工作,我希望。 打开Visual Studio

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

如果仍然存在问题occures

  • 工具 - >选项 - >调试(展开) - >一般 - >(检查)启用我的代码

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

Click Here for Detailed Images

+2

我认为这里的核心问题是动态对象使用try/catch就像if/else,它不会缩放性能,它会破坏你的CPU,特别是在循环中。 –

+0

@KellyElton我同意。 CLR似乎有内部依赖“预期”例外的习惯。这是一个非常令人担忧的设计实践,并且当您因其他原因而无法启用“Just My Code”时,会调试主要的PITA。 – Dan

相关问题