c# - 运行时的显式运算符转换

标签 c# asp.net webforms kentico ascx

我正在 Kentico 开发一个 asp.net 项目。

目前我创建了一个模型,我们称它为 PartnerModel。它包含一个 TreeNode 类型的私有(private)变量,它基本上以不同的形式保存相同的信息。

我希望能够将 PartnerModel 的实例显式转换为 TreeNode。 这应该在运行时发生(在 WebForms 用户控件中)。

编辑:我并不是在寻找“更好”的方法来实现我所要求的目标。这是一个没有明确用例的通用目的。下面的代码正是我试图做的。我只想知道,是否可以在运行时显式转换我的模型,如果可以,我该怎么做。

这可能吗?我刚收到 InvalidCast 异常。

PartnerModel.cs

public class PartnerModel
{
        #region Public Properties

        public TreeNode Node { get { return node; } }
        ...
        public static explicit operator TreeNode(PartnerModel model)
        {
            return model.node;
        }
}

PartnerOverview.ascx

...
<cms:BasicRepeater runat="server" ID="RepeaterPartner">
                <ItemTemplate>
                    <a href="<%# ((CMS.DocumentEngine.TreeNode)Container.DataItem).RelativeURL %>">
...

最佳答案

这不是处理这种情况的好方法。特别是在 MVC 中(也包括在其他类型的项目中),您应该在表示层中使用投影,而不是直接使用底层数据库模型。这就是为什么像 AutoMapper 这样的项目存在

在您的情况下,最佳做法是创建一个模型,其中包含您要在转换中使用的 TreeNode 类的所有属性 + 自定义属性,然后在演示文稿中使用此模型。

模型示例:

public class PartnerViewModel
{
    // partner specific properties
    public string PartnerName { get; set; }
    public int PartnerID { get; set; }

    // node properties
    public int NodeID { get; set; }
    public string NodeName { get; set; }
}

在您的表示层中,您应该只使用此 PartnerViewModel

关于c# - 运行时的显式运算符转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38914379/

相关文章:

html - 如何传输 ImageButton 下方的标题

c# - Medium Trust 允许哪些反射权限?

ASP.NET页面继承: Controls from base class are not initialized

c# - 如何在 Entity Framework 中处理这种层次结构

javascript - 具有 .m4v 格式的视频在我的网络中不在根目录中下载

c# - WPF 和 MVVM Light - 在 UserControl 中动态显示用户控件

css - VB.NET ASPX 动态更新表中的每个 TR 为每个 TR 添加属性

c# - 从 SQL 返回 2 个结果

c# - 将 C# 锯齿状数组转换为数组并再次返回

c# - 将 Matlab Coder 与 C# 集成