2014-10-30 120 views
1

我有一個asp.net mvc應用程序。我有兩個這樣的模型類:MVC模型類鑄造

public class BaseViewModel 
{ 
    ... 
} 

public class DerivedViewModel : BaseViewModel 
{ 
    ... 
} 

我有一個看法,我想使用這兩種模型的視圖。

@model BaseViewModel 
... 

內部視圖,我可以用這樣的:

@if (Model.GetType() == DerivedViewModel)){ 
@* Properties of Derived class *@ 
} 

我使用這個觀點像這裏面的一種形式:

@using (Html.BeginForm("Home", "Application", FormMethod.Post)) { 
... 
} 

但是當我發佈形式控制器方法,我無法將基類投射到派生類。如何在控制器方法中分離派生類和基類?我如何正確發佈?

+0

顯示你的控制器動作。 – haim770 2014-10-30 15:06:24

+1

你最好檢查這樣的模型類型:'@if(模型是DerivedViewModel)' – haim770 2014-10-30 15:07:21

+0

回答了在http://stackoverflow.com/questions/1524197/downcast-and-upcast – 2014-10-30 15:23:46

回答

1

拍下這一刻:

class Point 
{ 
    int x { get; set; } 
    int y { get; set; } 
} 
class Pixel : Point 
{ 
    string RGB { get; set; } 
} 

像素類從點繼承,所以像素對象將指向特性,而不是其他方式。看看:

var point = new Point { x = 1; y = 10; } // point object do not have RGB property; 
var pixel = new Pixel { x = 1; y = 10; RGB = "#FFF" } // no comments needed :) 

現在,用這些對象,你可以執行鑄造。但取決於每種方式,你將會做一個向下轉換或向上轉換。

var pointOfPixel = (Point)pixel; // upcasting, but will "loose" the RGB property 
var pixelFromPoint = (Pixel)point; // downcasting, a RGB property will be available with no value 

對於更深層次的信息,嘗試本文來自菲爾·科諾: Polymorphism, Up-casting and Down-casting