【问题标题】:What is the VB equivalent of @model dynamic in C# Razor?C# Razor 中 @model dynamic 的 VB 等价物是什么?
【发布时间】:2015-06-21 05:02:18
【问题描述】:

我在 ASP.NET MVC 5 中有一个使用动态模型的 View (vbhtml),我知道在 C# 中通过编写很容易做到这一点

@model dynamic

但是如何在 vbhtml 中指定呢?

【问题讨论】:

    标签: asp.net-mvc vb.net razor


    【解决方案1】:

    在 vb.net 中没有 C# Dynamic 等效项,您可以将 dynamic 替换为 Object 并确保设置了 option strict offdynamic 关键字为 C# 带来了 Option Strict Off 等效功能。

    【讨论】:

    • 问题在于后期绑定而不是选项严格
    【解决方案2】:

    基于MSDN的关键区别是:

    如果对实现了 IDynamicMetaObjectProvider 接口,Visual Basic 绑定到 使用该接口的动态对象。如果进行了后期绑定呼叫 到不实现 IDynamicMetaObjectProvider 的对象 接口,或者如果调用 IDynamicMetaObjectProvider 接口 失败,Visual Basic 使用后期绑定绑定到对象 Visual Basic 运行时的功能。

    既然你提到了:

    问题在于后期绑定而不是选项严格

    您通过使用后期绑定来引用dynamic 对象。在 C# 中,您将后期绑定对象的类型指定为 dynamic。在 Visual Basic 中,您将后期绑定对象的类型指定为 Object。有关详细信息,请参阅dynamic (C# Reference)Early and Late Binding (Visual Basic)

    您可以使用System.Dynamic 命名空间中的类创建自定义dynamic 对象。例如,您可以创建一个ExpandoObject 并在运行时指定该对象的成员。您还可以创建自己的继承 DynamicObject 类的类型。然后,您可以覆盖 DynamicObject 类的成员以提供运行时动态功能。

    可以在MSDN 中找到一个示例。

    更新: VB binder 不适用于在中等信任下键入为 dynamic 的内容。尝试将您的应用设置为完全信任。此外,Option Strict On 不允许在 VB.Net 中进行后期绑定。如果您尝试使用像 Html.EditorFor 这样的强类型帮助器,而您的视图不是强类型的类,那么您需要在 @Page 定义中指明模型类型:

    <%@ Page 
        Language="VB" 
        MasterPageFile="~/Views/Shared/Site.Master" 
        Inherits="System.Web.Mvc.ViewPage(Of YourApplication.YourModelClass)" %>
    

    那么你就可以安全地使用这些辅助方法了。

    【讨论】:

    • 感谢您的回答。我想做的是在我的视图(vbhtml)文件中使用这样的语句:@Html.TextBoxFor(Function(x) x.Id) 其中Id 在运行时绑定!如果我使用ExpandoObject,它将导致设计时错误,告诉Id 不是ExpandoObject 的成员,DynamicObject 也会发生这种情况。我要做的就是根据我的模型动态创建我的视图,模型本身是动态的,由从数据库中检索到的信息创建。看来我应该寻找另一种方式 mohandes ;)
    • @HamedZakeryMiab 为什么你要尝试使用强类型的助手,比如Html.EditorFor,而你的视图不是强类型的类?请查看我的更新
    • uhhh,回答您的问题非常困难!但简而言之,因为我的 MVC 应用程序不是一个独立的应用程序,并且在实际使用中它作为 OWIN 中间件在另一个应用程序上运行,其中模型在那里是强类型的!
    【解决方案3】:

    C# Razor 中 @model 动态的 VB 等效为 @ModelType

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-08
      • 2017-12-20
      • 2011-03-09
      • 2015-11-02
      相关资源
      最近更新 更多