上手、
2つのモデルクラスがあるとしましょう。
public class BaseClass{
public Int32 variable {get;set;}
}
public class DerivatedClass : BaseClass{
public Int32 otherVariable {get;set;}
}
そして、モデルとしてBaseClassタイプを持つビュー。
DerivatedClassをビューに渡し、フォームを介して情報を取得すると、DerivatedClassに再び「キャスト可能」になりませんか?
問題は、ビュー内でモデルのタイプ(Model.GetType()。FullName)を取得すると、(驚くことなく)DerivatedClassタイプを取得することです。
しかし、投稿されたモデルを確認すると、コントローラー内でBaseClassが取得されます(もちろん、キャストできません!)
コントローラ:
public ActionResult ViewPage(){
return View(new DerivatedClass());
}
[HttpPost]
public ActionResult ViewPage(BaseClass b){
b.GetType().FullName; //Gives me Project.packeges.BaseClass.
DerivatedClass d = (DerivatedClass)b; //Ops, It can't be done. Exception.
}
意見:
@model Project.packeges.BaseClass
<h3>@Model.GetType().FullName</h3>
<!-- Gives me Project.packeges.DerivatedClass -->
...
私の論理は間違っていますか?POST情報を取得した後、コントローラー内でこのキャストを行う方法はありますか?