2017-05-29 89 views
0

我開始學習ASP.NET MVC,並且有一些疑問。如何檢查一個類是否是MVC中的Model類。我有PHP Codeigniter背景,所有模型都繼承了CI_Model。很容易通過檢查instanceof運算符來確定類是否爲模型類,但在.NET MVC Model類中不擴展任何類。如何檢查一個類是否爲MVC中的模型類

那麼如何通過C#代碼來判斷類是否是模型類? MVC框架如何判斷類是否是模型。我已將文件夾從「Models」重命名爲「Modelss」,但仍然與ModelState.IsValid進行了模型綁定。任何幫助是極大的讚賞。

回答

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 
} 

順便說一句,在項目更改文件夾名稱沒有任何區別,因爲基於命名空間C#的作品,而不是文件夾結構,對於大多數應用程序類型。只要文件夾和類文件包含在項目中,並且引用了命名空間,一切都很好。

希望你找到這個信息有用!

相關問題