S t*_*ley 1 orchardcms c#-4.0 orchardcms-1.8
使用下面的代码,我有两个形状结果:
public ActionResult CompareRevisions(List<String> Ids)
{
contentItemLeft = // code to get a ContentItem
contentItemRight = // code to get a ContentItem
dynamic modelLeft = Services.ContentManager.BuildDisplay(contentItemLeft);
dynamic modelRight = Services.ContentManager.BuildDisplay(contentItemRight);
var ctx = Services.WorkContext;
ctx.Layout.Metadata.Alternates.Add("Layout_Null");
var shapeResultLeft = new ShapeResult(this, modelLeft);
var shapeResultRight = new ShapeResult(this, modelRight);
return shapeResultLeft;
}
Run Code Online (Sandbox Code Playgroud)
当我返回任何一个形状结果时,例如return shapeResultLeft在Controller的最后一行,浏览器会完美显示内容.不过,我怎么可以显示我的ShapeResults的:shapeResultLeft,shapeResultRight 在页面同一时间?
如何返回ShapeResults列表并使用View/Layout文件显示它?
你有多种选择:
方法1
MVC中最常用的一个(不是特定于Orchard)是一个视图模型:
public class MyViewModel {
public dynamic Shape1 { get; set; }
public dynamic Shape2 { get; set; }
}
public ActionResult CompareRevisions(List<String> Ids) {
// ..
var viewModel = new MyViewModel {
Shape1 = modelLeft,
Shape2 = modelRight
}
return View(viewModel)
}
Run Code Online (Sandbox Code Playgroud)
视图:
@model My.NameSpace.ViewModels.MyViewModel
@Display(Model.Shape1)
@Display(Model.Shape2)
Run Code Online (Sandbox Code Playgroud)
方法2
不使用强类型视图模型,您可以使用orchard的动态视图模型:
// inject IShapeFactory through Dependency Injection
public MyController(IShapeFactory shapeFactory) {
Shape = shapeFactory;
}
public dynamic Shape { get; set; } // inject with DI through IShapeFactory
public ActionResult CompareRevisions(List<String> Ids) {
// ..
var viewModel = Shape
.ViewModel() // dynamic
.Shape1(modelLeft)
.Shape2(modelRight);
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
方法3
或者使用Orchard的列表,当形状的数量可能变化时:
public dynamic Shape { get; set; } // inject with DI through IShapeFactory
public ActionResult CompareRevisions(List<String> Ids) {
// ..
var list = Shape.List();
list.AddRange(myShapes); // myShapes is a collection of build shapes (modelLeft, modelRight)
var viewModel = Shape
.ViewModel()
.List(list);
return View(viewModel);
}
Run Code Online (Sandbox Code Playgroud)
视图:
@Display(Model.List);
Run Code Online (Sandbox Code Playgroud)