我正在 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/