rendering - How to pass IEnumberable<Category> as Sitecore ViewRendering model -
suppose have model class in mvc called category (which has id , name fields)
there way can return ienumberable<catergory> view rendering model mvc view file?
you have few choices data mvc view in sitecore. alls of examples below community mvc project available review. can found here:
https://github.com/sitecore-community/sample-sitecore-mvc
view renderings
to trying do, having custom model in view rendering. need create model inherits irenderingmodel. using irenderingmodel requires have function called initialize. in initialize create logic need build ienumberable. if want details of category editable, need make sure return model fields htmlstring types.
i want note developers not use method because not testable.
public class car : irenderingmodel { public htmlstring make { get; set; } public htmlstring model { get; set; } // rendering represents context rendering - particular model ever used view renderings public sitecore.mvc.presentation.rendering rendering { get; set; } // item represents rendering's datasource, , pageitem represents context page // these properties exist on sitecore's own renderingmodel object public item item { get; set; } public item pageitem { get; set; } public void initialize(sitecore.mvc.presentation.rendering rendering) { // use rendering object passed in sitecore set datasource item , context pageitem properties rendering = rendering; item = rendering.item; pageitem = pagecontext.current.item; // set property values using fieldrenderer ensure values editable in page editor make = new htmlstring(fieldrenderer.render(item, "make")); model = new htmlstring(fieldrenderer.render(item, "model")); } } then in /sitecore/layout/models create new model rendering. in type field specify model create above. in example mvc.data.models.car.
finally in view rendering, specify model class , use model data.
@model mvc.data.models.car <!-- set 'background' parameter, go page editor > select 'design' mode, click on featured car component > click more > click edit component properties > scroll down 'parameters' section --> <div class="highlight" style="background-color: #@model.rendering.parameters["background"]"> <h3>this week's featured car</h3> <p><strong>model:</strong> @model.model</p> <p><strong>make:</strong> @model.make</p> </div> controller renderings
in cases when have custom data, recommend using controler rendering. clean, reusable , testable.
model
create traditional model rendering use.
namespace mvc.data.models { /// <summary> /// light-weight model used example of how can isolate sitecore-dependent code repository, /// means models have no dependency on sitecore , more regular asp.net mvc models. see drivercontroller.cs /// usage. /// </summary> public class driver { public htmlstring name { get; set; } public htmlstring text { get; set; } public htmlstring image { get; set; } } } view model
in example, author creates view model has driver model, plus information rendering datasource item.
public class driverviewmodel { public driver driver { get; set; } public string background { get; set; } public item contextitem { get; set; } } controller
then create controller/repository fill model. passing rendering.
public actionresult featured() { var repository = _driverrepository; var driver = repository.getdriver(); var driverviewmodel = repository.getdriverviewmodel(driver); return view(driverviewmodel); } rendering
@model mvc.data.models.driverviewmodel <!-- set 'background' parameter, go page editor > select 'design' mode, click on featured driver component > click more > click edit component properties > scroll down 'parameters' section --> <div class="highlight" style="background: #@model.background"> <h3>this week's featured driver</h3> <p><strong>name:</strong> @model.driver.name</p> <p><strong>description:</strong></p> @model.driver.text </div>
Comments
Post a Comment