对象作为动作控制器的参数?

use*_*480 0 c# asp.net-mvc

动作控制器是否可以接受文字对象.例如,我有几个视图,其中我想将各种模型发布到单个控制器,然后可以确定传入的模型对象以进行进一步处理.

型号样本:

public class Model1
{
   // properties, etc.
}

public class Model2
{
   // properties, etc.
}

public class Model3
{
   // properties, etc.
}
Run Code Online (Sandbox Code Playgroud)

控制器样本:

[HttpPost]
public ActionResult ProcessModel(Object anyModel)
{
   // determine the model
   if((anyModel as Model1) != null)
   {
     var model1 = anyModel as Model1;
     // continue with code
   }
   else if((anyModel as Model2) != null)
   {
     var model2 = anyModel as Model2;
     // continue with code
   }
   // continue with model check, etc.       
}
Run Code Online (Sandbox Code Playgroud)

我试过了,但我的控制器似乎没有拿起模型,因为我的对象参数仍然是空的.这可能吗?

Pau*_*bra 6

有一个关于如何模型绑定工作快速阅读 ...模型绑定(这需要无论是发布到你的行动,并把它变成了anyModel参数使用参数的类型来决定该怎么做.

既然类型是Object它什么都不能做.

我的猜测(取决于你想要实现的目标)是你可以有几个Action重载,每个都有一个不同类型的Model作为参数然后调用公共代码.

[HttpPost]
public ActionResult ProcessModel(Model1 anyModel){}

[HttpPost]
public ActionResult ProcessModel(Model2 anyModel){}

[HttpPost]
public ActionResult ProcessModel(Model3 anyModel){}
Run Code Online (Sandbox Code Playgroud)

这说有一个动作需要很多不同的模型,这有点奇怪.做一些其他事情你很有可能会更好.

如果您说出您想要实现的目标,您的问题可能会收集更好的答案

  • 参数必须是不同的类型.http://csharpindepth.com/Articles/General/Overloading.aspx (3认同)
  • 我认为您不能使用相同名称的多个操作(无论参数如何). (2认同)
  • 你去... http://stackoverflow.com/a/436935/222163 MVC做barf,但你可以为每个Action添加一个属性来区分它们.那说我觉得做别的事情比较好:) (2认同)