32

我面临下一个问题:

我正在尝试运行 .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;),我得到了带有消息的 RuntimeBinderException

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

我正在使用带有 .NET 4.5 的 Visual Studio 2012 和带有 .NET 4.0 的 ApplicationPool 的本地 IIS 服务器。在具有相同配置的另一台计算机上,一切正常,没有抛出异常。

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

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

4

2 回答 2

35

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

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

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

如果仍然出现问题

  • 工具 --> 选项 --> 调试(扩展) --> 常规 --> (检查)仅启用我的代码

希望它有帮助,它对我有用

点击这里查看详细图片

于 2014-06-30T10:32:18.463 回答
3

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

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

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

ViewBag RuntimeBinderException (MVC 4, ASPX)

于 2013-09-05T20:25:07.913 回答