在工厂中创建一个局部视图
本文关键字:一个 局部 视图 工厂 创建 | 更新日期: 2023-09-27 18:10:34
假设我们有一个用于返回部分的工厂,其中包含选择某个部分的逻辑。我想把这个责任委托给工厂,然后在控制器里面写一个简洁的代码:
[HttpGet]
public PartialViewResult GetQueryItemForCategory(string categoryName, bool campaignSelected)
{
return QueryItemBuilderFactory.BuildPartial(categoryName, campaignSelected);
}
但是我真的不能在工厂中调用PartialView()方法
public static class QueryItemBuilderFactory
{
private static Dictionary<string, Func<bool, PartialViewResult>> _builderActions =
new Dictionary<string, Func<bool, PartialViewResult>>();
static QueryItemBuilderFactory()
{
_builderActions.Add("Data Field", campaignSelected =>
{
return PartialView("_DataFieldQueryItemPartial");
});
}
public static PartialViewResult BuildPartial(string categoryName, bool campaignSelected)
{
return _builderActions[categoryName](campaignSelected);
}
}
有办法实现吗?
受保护的PartialView
方法是在Controller
基类上定义的:
public abstract class Controller : ControllerBase, IActionFilter,
IAuthorizationFilter, IDisposable, IExceptionFilter, IResultFilter
{
...
protected internal PartialViewResult PartialView()
{
...
}
protected internal PartialViewResult PartialView(object model)
{
...
}
protected internal PartialViewResult PartialView(string viewName)
{
...
}
...
}
因此,继承这个Controller
类使您能够使用此方法,而在其他情况下则不可用。但是,可以看到PartialView
方法返回PartialViewResult
对象,因此替换
return PartialView("_DataFieldQueryItemPartial");
在你的例子中和
return new PartialViewResult(){ ViewName = "_DataFieldQueryItemPartial" };
'PartialViewResult'类继承'ViewResultBase'类。ViewResultBase类有设置新视图类型所需的属性和方法。
调用PartialView实际上只返回PartialViewResult对象。你可以在任何地方创建新的PartialViewResult。所以,你可以在你的基本控制器上创建你自己的快捷方法FactoryPartialView(),它可以使用你的工厂代替"new"操作符来创建PartialViewResult。