我有以下课程结构。
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 */
}
答案 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())
{
}
}