如果我的理解是否正確這應該解決您的問題
剛剛創建PartialViewResult其接受多個視圖名稱,使它們派生新類。爲了讓它更易於使用,請爲控制器創建一個新的擴展方法,以調用您的自定義ViewResult。
這對我有用。您可以如此簡單使用它:
public ActionResult Index()
{
return this.ArrayView(new string[] { "ViewA", "ViewB" });
}
要使其工作ArrayViewResult類應該是:
public class ArrayViewResult : PartialViewResult
{
public IEnumerable<string> Views;
protected override ViewEngineResult FindView(ControllerContext context)
{
return base.FindView(context);
}
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
throw new ArgumentNullException("context");
if (!Views.Any())
throw new Exception("no view...");
TextWriter writer = context.HttpContext.Response.Output;
foreach(var view in Views)
{
this.ViewName = view;
ViewEngineResult result = FindView(context);
ViewContext viewContext = new ViewContext(context, result.View, ViewData, TempData, writer);
result.View.Render(viewContext, writer);
result.ViewEngine.ReleaseView(context, result.View);
}
}
}
擴展方法:
namespace System.Web.Mvc
{
public static class ArrayViewResultExtension
{
public static ArrayViewResult ArrayView(this Controller controller, string[] views)
{
return ArrayView(controller, views, null);
}
public static ArrayViewResult ArrayView(this Controller controller, string[] views, object model)
{
if (model != null)
{
controller.ViewData.Model = model;
}
return new ArrayViewResult
{
ViewName = "",
ViewData = controller.ViewData,
TempData = controller.TempData,
ViewEngineCollection = controller.ViewEngineCollection,
Views = views
};
}
}
}
頂人馬茲 - 完美的作品! –