假设我们有一个工厂来返回包含选择某个逻辑的逻辑的部分。我希望有人将这个职责委托给工厂,然后在控制器内编写一个简洁的代码:
[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);
}
}
有没有办法实现它?
答案 0 :(得分:2)
受保护的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" };
会做到这一点。
答案 1 :(得分:1)
&#39; PartialViewResult&#39; class继承&#39; ViewResultBase&#39;类。 &#39; ViewResultBase&#39; class具有设置新视图类型所需的属性和方法。声明对象类型时要小心。
答案 2 :(得分:0)
调用PartialView实际上只返回PartialViewResult对象。您可以在任何地方创建新的PartialViewResult。因此,您可以在基本控制器上创建自己的快捷方法FactoryPartialView(),使用您的工厂代替“new”运算符来创建PartialViewResult。