MVC4:Model中的接口对象

时间:2013-03-07 09:00:53

标签: razor asp.net-mvc-4

我对MVC很新。我有以下模型类:

public class Store
{   
  public PriceList PriceListInfo { get; set; }
  public IStore storeData;
}    

public class PriceList
{
  public int id { get; set; }
  public string codice { get; set; }
}    

public interface IStore
{
 [...]
}    

public class Silo2Store : IStore
{
  public int S2 { get; set; }
  public int S3 { get; set; }
}

我希望在我看来使用这个模型:

@model Store

@Html.TextBoxFor(model => ((Silo2Store)Model.storeData).S3) 

相应的Controller方法是:

public ActionResult Customer()
{
    using (Store t = (Store)Session["Store"])
    {
        if (t.PriceListInfo == null)
        {
            t.PriceListInfo = new PriceList();
        }
        t.PriceListInfo.codice = "XXX";
        return View(t);
    }
}

我想在我的Controller中检索模型:

[HttpPost]
public ActionResult Customer(Store modelStore)
{
    var test = ((Silo2Store)Model.storeData).S3;
}

Model.storeData属性未在我的视图中初始化,它是null。然后,我无法在控制器中检索该值。

我应该改变我的模型吗?

1 个答案:

答案 0 :(得分:1)

您必须为IStore定义自己的模型绑定器。

取自this article on MSDN Magazine about MVC Model Binding

  

例如,即使Microsoft .NET Framework为面向对象原则提供了出色的支持,DefaultModelBinder也不支持绑定到抽象基类和接口。