我的控制器中有两个动作,它们共享负责选择视图的部分逻辑。我怎样才能使这部分在动作中通用。例子:
控制器文件
行动开放
- 如果找到一个文档并且类型为 X,则使用 OpenX 视图显示它
- 如果找到一个文档并且类型为 Y,则使用 OpenY 视图显示它
- 如果找到多个文档,则使用列表视图显示列表
- 如果没有找到文档,使用错误视图显示错误
动作 OpenMetaData
- 如果找到一个文档,则使用 OpenMetaData 视图显示它
- 如果找到多个文档,则使用列表视图显示列表
- 如果没有找到文档,使用错误视图显示错误
如您所见,点 3,4 与 2,3 相同
我想创建类似的东西
public DocumentController
{
public ActionResult Open( ... )
{
var dataFromWebService = service.GetData( ... );
return ViewSelector.GetLaunchView(dataFromWebService);
}
public ActionResult Open( ... )
{
var dataFromWebService = service.GetData( ... );
return ViewSelector.GetOpenMetaData(dataFromWebService);
}
}
public class ViewSelector
{
public static ActionResult GetLaunchView(DataFromWebService dataFromWebService)
{
if( dataFromWebService contains document type X)
return new ViewResult("OpenX",data);
if( dataFromWebService contains document type Y)
return new ViewResult("OpenY",data);
return CommonLogic(dataFromWebService);
}
public static ActionResult GetOpenMetaData(DataFromWebService dataFromWebService)
{
......
}
private static ActionResult CommonLogic(DataFromWebService dataFromWebService)
{
.... Common logic
}
}
我想这样做是为了让我的控制器尽可能干净。
我可以在控制器外部创建 ViewResults,将数据附加到它们并在操作中返回它们吗?
这是好还是坏的设计?
也许有人有更好的想法如何处理这个