asp.net-mvc – 动态类型的ViewPage

这可能吗?这是我正在尝试的:
public ActionResult Index()
    {
        dynamic p = new { Name = "Test",Phone = "111-2222" };
        return View(p);
    }

然后我的视图继承自System.Web.Mvc.ViewPage< dynamic>并尝试打印出Model.Name.

我收到一个错误:’<> f__AnonymousType1.Name由于其保护级别而无法访问

那么基本上,我正在试图做的只是不可能?为什么或者为什么不?

更新:这是我的观点

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<dynamic>" %>

<asp:Content ...>
    <%=Model.Name%>
    <%=Model.Phone%>
</asp:Content>

View构造函数内置于框架中.

解决方法

匿名类型不能由方法返回;它们仅在定义它们的方法的范围内有效.

您应该使用以前定义的Model类,并将其传递给您的View.传递没有定义每个字段的Model类没有错误.

更新:

我以前我错了.这应该工作.也许问题在视图内.你能发布更多的代码吗?特别是View及其构造函数.

更新第二个:

好的,将匿名类型传递给另一种用作动态变量的方法错误的 – 可以做到这一点.

但我也错了,我相信你想做的事情会奏效.不幸的是,你不会.问题是您正在使用ViewPage< TModel>,它使用ViewDataDictionary< TModel>内部.因为它们需要强大的类型,所以您将无法使用动态对象.内部结构在内部不使用动态,并且在类型失败时指定动态.

需要的是DynamicViewPage类和相应的DynamicViewDataDictionary类,它接受对象并将其在内部存储为动态.然后你可以使用匿名类型并将其传递给您的Views.

也就是说,你不会得到任何东西.您可以按照您所做的(即<%= Model.Name%>)指定您的观看次数,但不会受益于强力打字.没有智慧,没有类型的安全.你也可以像@Dennis Palmer所说的那样使用无类型的ViewDataDictionary.

这是一个有趣的(对我来说,不幸的是吸收)思想实验,但我认为最终不会发生.声明公共类型并将其传递给您的视图,或使用无类型字典.

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....