如何检查类是否是MVC中的模型类

时间:2017-05-29 19:40:57

标签: asp.net asp.net-mvc

我开始学习ASP.NET MVC,我有一些疑问。如何检查类是否是MVC中的Model类。我有PHP Codeigniter背景,其中所有模型都继承CI_Model。通过检查instanceof运算符很容易弄清楚类是否是模型类,但在.NET MVC Model类中不扩展任何类。

那么如何通过C#Code判断一个类是否是一个模型类? MVC框架如何确定类是否是模型。我已将“模型”中的文件夹重命名为“Modelss”,但模型绑定仍与ModelState.IsValid一起使用。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

MVC应用程序中的大多数模型都是普通的旧CLR对象(PO​​CO),它们通常没有基类,因为它不需要。如果需要,您可以更改它。

  

在以下示例中,假设您有一个名为param的对象从某个地方进来。

在C#中,您可以通过几种方式检查对象是否属于某种类型。您可以将对象强制转换为类型,如果没有异常,则转换成功。 这不再是首选方法了,但我想让你知道是否有选项。

try {
    var myType = (MyModel)param; // cast happens here
    // do something with myType
}
catch{
    // cast failed
}

另一种方法是使用as运算符。这是一种更好的方法,因为如果转换失败则不会抛出任何异常,只需在变量中获得null

var myType = param as MyModel;
if (myType != null) { // you have what you need.
    ...
}

另一种技术是is运算符(另一种好方法)。这类似于as,但返回一个布尔而不是对象,或者返回null,你可以在if语句中内联它来进行转换,并在一行中分配一个变量代码。

if (param is MyModel myType){
    // do something with myType
}

如果确实在模型中添加了基类,则可以在上面的示例中使用该类型而不是类名。如果需要,可以放弃基类并使用marker interface(没有属性的接口或在其中声明的函数),并检查该类型。

public interface IModel {}
public class MyModel : IModel {
    ...
}

if (param is IModel myType){
    // do something with myType
}
BTW,更改项目中的文件夹名称没有任何区别,因为对于大多数应用程序类型,C#基于名称空间而不是文件夹结构。只要文件夹和类文件包含在项目中,并且引用了名称空间,一切都很好。

希望您发现此信息有用!