![](/img/trans.png)
[英]JsonConvert.SerializeObject with casted child to parent still returns parent properties
[英]Find TypeOf Child class when casted as Parent
我有一个局部视图,希望可以与几种不同的模型一起使用。 当以对象的父类形式传递对象时,有什么方法可以找出它的子类?
例如:
模型:
public class Animal { }
public class Dog : Animal { }
public class Cat : Animal { }
控制器:
public class AnimalActionController : Controller
{
public ActionResult MakeAnimalSound(Animal animal)
{
if (animal is Dog)
{
return PartialView("~/Views/_AnimalActionView.cshtml", new{sound="Woof"});
}
if (animal is Cat)
{
return PartialView("~/Views/_AnimalActionView.cshtml", new{sound="Meow"});
}
}
}
狗页面的父视图:
@model Test.Models.Dog
@Html.Action("MakeAnimalSound", "AnimalAction", new { Model })
现在,如果我要执行类似此示例的操作,那么Controller中的if语句只会将动物视为动物,而不是原来的动物是狗或猫。
有人知道怎么做吗? 我觉得这应该很简单。
一个更好的选择是做这样的事情。 测试类类型是一个糟糕的设计,并且在大多数情况下被认为是代码的味道(有时是必须的,但是通常有其他方法可以在没有它的情况下完成您想要的工作):
public class Animal
{
public virtual Sound {get;}
}
public class Dog : Animal
{
public override Sound {get {return "Woof";}}
}
public class Cat : Animal
{
public override Sound {get {return "Meow";}}
}
public ActionResult MakeAnimalSound(Animal animal)
{
return PartialView("~/Views/_AnimalActionView.cshtml", new{sound=animal.Sound});
}
如果调用对象的GetType()方法,则会得到一个对象,该对象将告诉您所有您需要了解的内容。 请参阅System.Type上的MSDN页面 。
以下程序输出Child
。
internal class Parent {
private string Something { get; set; }
}
internal class Child : Parent {
private int SomethingElse { get; set; }
}
internal class Program {
private static void Main(string[] args) {
Parent reallyChild = new Child();
Console.WriteLine(reallyChild.GetType().Name);
Console.ReadLine();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.