" data-window-url="/SomeUrl/Partial//" > 它所做的是打开-6ren">
gpt4 book ai didi

c# - MVC 中带有动态匿名对象的 RuntimeBinderException

转载 作者:可可西里 更新时间:2023-11-01 08:46:28 24 4
gpt4 key购买 nike

代码

我有一个 MVC 项目,其中的部分页面看起来有点像这样:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<div class="tab-window <%= Model.TargetClass %> <%= Model.TargetTab == Model.SelectedTab ? "selected" : "" %>"
data-window-url="/SomeUrl/Partial/<%= Model.TargetTab %>/"
<%= Model.TargetTab == Model.SelectedTab ? "data-content-loaded=\"true\"" : "" %>>
<% if (Model.TargetTab == Model.SelectedTab) {
Html.RenderPartial(Model.TargetTab as string, Model.Model as object);
} %>
</div>

它所做的是打开另一个部分(在 Model.TargetTab 中命名的部分)如果它是当前可见的选项卡,则使用 Model.Model ,否则只呈现一个空的 div (在需要时使用 jQuery 加载)。

它的名字是这样的:

<% Html.RenderPartial("TabWindowContainer", new { TargetTab = "MyTabName", TargetClass = "my-tab-class", SelectedTab = Model.Tab, Model = Model }); %>

这曾经有效。

然后我更改了进入 Model 的值,它停止工作了。我改回来了,还是不行。需要明确的是,hg status 目前不显示任何这些文件。

异常

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'object' does not contain a definition for 'TargetClass'

当您尝试在 Quickwatch 窗口中打开 Model 时,您会看到它的所有属性设置都具有正确的值

Quickwatch

但是当您尝试查看任何属性时,您会得到与之前相同的异常

Quickwatch with exception

考虑了一下,我意识到这可能根本不应该起作用;我们试图访问的对象来自不同的程序集,因此我们看不到它的属性。但是,为什么它过去有用呢?我还有一个可以运行的运行版本。我该怎么做才能让它再次发挥作用?

更新:它应该有效;该模型来自同一程序集中的另一个 View ,而不是来自 Controller 。

最佳答案

您的动态类型无法在匿名类型中找到属性,因为匿名类型的属性是内部的(非公共(public)的)。因此,即使匿名类型的属性对调试器来说是显而易见的,您的应用程序也会抛出异常。 Reference.

创建一个 Expando 扩展方法。

public static ExpandoObject ToExpando(this object anonymousObject)
{
IDictionary<string, object> anonymousDictionary = new RouteValueDictionary(anonymousObject);
IDictionary<string, object> expando = new ExpandoObject();
foreach (var item in anonymousDictionary)
expando.Add(item);
return (ExpandoObject)expando;
}

如此应用扩展。

<% Html.RenderPartial("TabWindowContainer", new { TargetTab = "MyTabName", TargetClass = "my-tab-class", SelectedTab = Model.Tab, Model = Model }.ToExpando()); %>

希望这会奏效,我没有因为误解这个问题而让自己难堪。

关于c# - MVC 中带有动态匿名对象的 RuntimeBinderException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5858129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com