【问题标题】:In a simple Viewbag.Title, getting a RuntimeBinderException在一个简单的 Viewbag.Title 中,得到一个 RuntimeBinderException
【发布时间】:2013-12-31 19:28:20
【问题描述】:

我有一个非常简单的 ViewBag.Title。像这样:

@{
    ViewBag.Title = "My Title";
    ViewBag.MiniTitle = "Sub - Title";
}

在 _Layout.cshtml 上解析的是

<title>@ViewBag.Title</title>

但是,我得到了这个例外:

Thrown: "'System.Dynamic.DynamicObject' does not contain a definition for 'Title'"
(Microsoft.CSharp.RuntimeBinder.RuntimeBinderException) 
Exception Message = "'System.Dynamic.DynamicObject' does not contain a definition for 
'Title'", Exception Type = "Microsoft.CSharp.RuntimeBinder.RuntimeBinderException"

我一直在搜索,但找不到太多关于它的信息。这与这家伙面临的问题基本相同:http://forums.asp.net/t/1715878.aspx?MVC3+Razor+Viewbag+Title+RuntimeBinderException

我的问题也与上一个发布的人相同。这不会对我造成任何问题,项目工作正常,我的头衔也是如此。但是,我不喜欢由于价格昂贵而引发异常的事实。

有谁知道我该如何解决这个问题?谢谢!

【问题讨论】:

  • 如果你使用 viewdata 会发生什么,你会得到任何错误吗?
  • 可能重复的问题:stackoverflow.com/questions/6979629/… 祝你好运。
  • 我没有尝试过 Viewdata。我遵循默认的 ViewBag.Title ,但它引发了异常。这不可能是正常的。另外,对于这个问题,我认为您的链接根本不是重复的。正在谈论不同的事情。

标签: c# asp.net-mvc razor viewbag


【解决方案1】:

可能是您在声明之前使用了@ViewBag.Title,例如,如果您的布局文件有

<title>@ViewBag.Title</title>

但您稍后在局部视图或类似视图中定义标题

@{
    ViewBag.Title = "My Title";
    ViewBag.MiniTitle = "Sub - Title";
}

尝试在控制器操作中设置 ViewBag.Title,以便在调用 View() 之前可用

【讨论】:

  • 这可能是问题所在。在 View.chstml 中,@{ ViewBag is defined },然而,它首先在 Layout.cshtml 上被调用,然后是 RenderBody()。所以可能就是这样,但是你应该怎么做呢?这是标准方式。
  • 我更喜欢使用 ViewModels 作为企业应用程序的更强大的解决方案。对于少量数据,可以在控制器的操作中设置 ViewBag。在视图中设置 ViewBag 通常是个坏主意。
  • 我也遇到了这个问题,奇怪的是它包含在默认的 asp.net 模板中
【解决方案2】:

我试过了,它对我有用:

@(ViewBag.GetType().GetProperty("Title") == null ? "" : ViewBag.Title)

这是一个老问题,但也许它可以帮助某人。

问候。

【讨论】:

    【解决方案3】:

    您的 DLL 已损坏。我通过从我的同事那里复制 Microsoft.CSharp.dll 来修复它。 位置是 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7 (您根据自己调整的版本的最后一个文件夹)

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题。例如,我可以修复它的唯一方法是将 ViewBag.Title 更改为 ViewData["Title"]。从技术上讲,ViewBag 和 ViewData 是一回事,ViewData 使用起来更快,但你必须键入 cast...但是如果它是一个字符串,它似乎可以在没有强制转换的情况下正常工作,因为它会自动调用 ToString。

      【讨论】:

        【解决方案5】:

        我试图在没有运气的情况下重新生成上述问题。

        您已在母版页中设置 ViewBag.Title,并且此错误似乎发生在您未定义 ViewBage.Title 的另一个视图中 财产。

        由于 ViewBag.Title 是 Master 页面的局部变量,其他 View 将无法获取它并抛出上述错误。

        现在,尝试在标签中使用 ViewBag.MiniTitle。 你仍然得到同样的错误吗?

        请分享。

        【讨论】:

        • 你是在提问还是在回答?
        • 简单的英语,如果你能看懂
        • 那这个不能回答!如果您遇到任何问题,请点击 ask question 按钮发布新问题,或者您可以在特定线程上发表评论以寻求解决方案或更多说明。
        • 请查看我提供的链接。我相信它会准确地向您展示如何接收此错误。这不是一个真正的错误,但你知道我的意思。任何 Viewbag 都会抛出该异常。
        猜你喜欢
        • 2011-10-14
        • 2014-12-21
        • 1970-01-01
        • 2019-10-11
        • 2016-04-28
        • 1970-01-01
        • 2011-09-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多