2015-09-17 33 views
1

使用下面的代码,我有两个形状的结果:如何在Orchard的单个页面上显示两个形状结果?

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; 
} 

当我在控制器的最后一行返回任何一种形状的结果,例如return shapeResultLeft的,浏览器完美显示该内容。但是,如何在同一页面上同时显示我的两个ShapeResults:shapeResultLeft,shapeResultRight

如何退还ShapeResults的列表,并使用查看/版式文件显示呢?

回答

5

您有这多种选择:

方法1在MVC(未果园专用)最常用的

一个是视图模型:

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) 
} 

观点:

@model My.NameSpace.ViewModels.MyViewModel 

@Display(Model.Shape1) 
@Display(Model.Shape2) 

方法2

不使用强类型的ViewModels,您可以使用果园的动态视图模型:

// 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); 
} 

方法3

或者与果园的列表中,当形状的数量可能会有所不同:

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); 
} 

查看:

@Display(Model.List); 
+0

能否请你告诉我什么是“通过IShapeFactory与DI注入”是什么意思?什么是DI? 。 Iam只是一个新手,我很抱歉问这个小细节 –

+0

见方法2编辑答案 – devqon

+0

感谢百万吨!完美地完成了上述3种方法。 –

相关问题