Asp.net mvc 根据数据类型呈现不同的视图(asp.net MVC)

Asp.net mvc 根据数据类型呈现不同的视图(asp.net MVC),asp.net-mvc,Asp.net Mvc,假设控制器中有一个动作,看起来有点像这样: public ViewResult SomeAction(int id) { var data = _someService.GetData(id); ... //create new view model based on the data here return View(viewModel); } 我试图找出的是基于数据类型呈现不同视图的最佳方法。 “\u someService.GetData方法返回一个知道其输

假设控制器中有一个动作,看起来有点像这样:

public ViewResult SomeAction(int id)
{
    var data = _someService.GetData(id);
    ...
    //create new view model based on the data here
   return View(viewModel);
}
我试图找出的是基于数据类型呈现不同视图的最佳方法。 “\u someService.GetData方法返回一个知道其输出类型的数据(即,不仅可以执行typeof(data),还可以执行data.DataType,然后您将获得一个枚举值 这样我就可以完成我想做的事情

public ViewResult SomeAction(int id)
{
    var data = _someService.GetData(id);

    //mapping fields to the viewModel here
    var viewModel = GetViewModel(data); 

   swtich(data.DataType) 
     case DataType.TypeOne:  return View("TypeOne", viewModel); break;
   ...


}
但这似乎不是最好的方法,(我不知道它是否有效) 这是路吗? 我应该使用某种渲染部分方法吗?毕竟,视图中的哪些变化主要取决于数据的顺序(即视图的其余部分将非常相似) 干杯

试试这个:

public ViewResult SomeAction(int id)
{
    var data = _someService.GetData(id);
    var viewModel = GetViewModel(data); 
    return View(data.GetType().Name, viewModel);
}
然后,只需相应地命名视图。

如果GetViewModel(data)是动态的,则无法工作,您需要创建视图,然后为其指定一个视图名称以工作(否则会出现一个错误,提示最好的重载是视图(string,string)