ASP.NET MVC4 One View多模型

时间:2013-11-20 14:26:18

标签: c# asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5

我有以下课程结构。

public BaseClass
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public ClassOne : BaseClass
{

}

public ClassTwo : BaseClass
{

}

我的控制器是这样的

public TestController : Controller
{
     public ActionResult ClassOne()
     {
          ClassOne model = new ClassOne();
          return View("Create",model);
     }

     public ActionResult ClassTwo()
     {
          ClassTwo model = new ClassTwo();
          return View("Create",model);
     }         

我的观点("创建")是这样的:

     @model MvcApplication.Models.BaseClass

     @using(Html.BeginForm("Post","Test",FormMethod.Post))
     {
            @Html.HiddenFor(model => mode.Id)
            @Html.TextBoxFor(model => model.Name)
            <input type="submit" value="Submit"/>
     }

My Post Action对于两个模型都是相同的,即ClassOne&amp; ClassTwo。 On Post如何知道Post Action中传递的模型是ClassOne还是ClassTwo。

     [HttpPost]
     public ActionResult Post(BaseClass model)
     {
          /* Code */
     }

6 个答案:

答案 0 :(得分:2)

在帖子里面只检查类型。可以if(model is ClassOne)if(model.GetType() == typeof(ClassOne))

答案 1 :(得分:2)

如果不创建自己的ModelBinder,我不确定是否可行。在这种情况下,您将始终进入BaseType类的操作实例。

答案 2 :(得分:1)

您可以使用typeof()

if(model.GetType() == typeof(ClassOne)){
 // do something
}else {
 // do something else.
}

编辑:

感谢@JoreanVannevel

if(model is ClassOne){}

答案 3 :(得分:0)

您只需检查对象的类型即可。

if(model.GetType() == typeof(ClassOne))
{
    // Do something
}

答案 4 :(得分:0)

约拿 您应该为视图使用一个模型。现在你可以做两件事

首先,

您可以使用自定义模型绑定器,请参阅此处http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder

或(第二件事),

Html.Beginform中的

还将隐藏字段放置到标识类型(对于ClassOne为1,对于ClassTwo为2)。现在创建一个第三类,它具有ClassTwo和ClassOne的不同属性,BaseClass的公共属性和类型信息的额外属性。(这里不使用任何类型的验证) 对于帖子使用新创建的类型,然后检查类型字段。

答案 5 :(得分:0)

您的问题操作无法判断类型。因为操作的视图类型是松散的。 但我们可以在查看获取类型,并将类型发送到操作

这样看:     @model MvcApplication.Models.BaseClass

 @using(Html.BeginForm("Post","Test",FormMethod.Post))
 {
        @Html.HiddenFor(model => mode.Id)
        @Html.TextBoxFor(model => model.Name)
        @Html.Hidden("type", model.GetType().Tostring())

        <input type="submit" value="Submit"/>
 }

这样的行动:

[HttpPost]
 public ActionResult Post(BaseClass model)
 {
      /* Code */
      if(Request["type"] == typeof( ClassOne).Tostring())
      {
      } 
      if(Request["type"] == typeof( ClassTwo ).Tostring())
      {
      } 
 }