2017-06-14 3 views
0

dies mein CodeBenutzerdefinierte Eigenschaft Value Converter Umbraco Kosten Leere

@inherits Umbraco.Web.Mvc.UmbracoTemplatePage<ContentModels.HomePage> 
@using ContentModels = Umbraco.Web.PublishedContentModels; 
@using System.Web.Script.Serialization; 
@using Newtonsoft.Json.Linq; 
@using System.Collections.Generic; 
@using Umbraco.Core.Models.PublishedContent; 
@using Umbraco.Core.PropertyEditors; 
@using Newtonsoft.Json; 
@using System.Linq; 


@{ 
    Layout = "Master1.cshtml"; 
} 


    <!-- Top menu --> 
     @*@Html.Partial("TopMenu")*@ 
     <!-- End top menu --> 
     <!-- Main nav --> 
     @Html.Partial("MainMenu") 
     <!-- Main nav ends --> 

@Html.Partial("PromoCarousel") 

<div class="landing-page"> 
    @CurrentPage.GetGridHtml("bodyText") 
</div> 
<div class="col-lg-12"> 
    @Umbraco.Field("promo") 
</div> 




@{ 

    if (CurrentPage.HasValue("promo")) 
    { 
     var promoListValue = CurrentPage.GetPropertyValue("promo"); 



    var serializer = new JavaScriptSerializer(); 
    string json = serializer.Serialize(promoListValue); 
     var testmodel = serializer.DeserializeObject(json); 


    @* foreach (var item in promoListValue) 
      { 
       <span>@item </span> 
      } 

      @Html.Raw(json) 
      @Html.Raw(Json.Encode(json)) 
      *@ 
      @Html.Raw(testmodel) 

      var obj = Model.Content.GetPropertyValue<MyLookAlikeArchetypeModel>("promo"); 
      <span>@obj </span> 
      foreach(var item in obj) 
       { 
        <p>@item.img</p> 
        <p>@item.alias</p> 
       } 

    } 



} 



<div class="container _borderless landingpage"> 

</div> 
@functions { 



public class MyLookAlikeArchetypeFieldSet 
{ 
    [JsonProperty("alias")] 
    public string alias { get; set; } 

    [JsonProperty("img")] 
    public string img { get; set; } 
} 

public class MyLookAlikeArchetypeModel 
{ 
    private List<MyLookAlikeArchetypeFieldSet> _Items; 

    public MyLookAlikeArchetypeModel() 
    { 
     _Items = new List<MyLookAlikeArchetypeFieldSet>(); 
    } 

    public MyLookAlikeArchetypeModel(List<MyLookAlikeArchetypeFieldSet> list) 
    { 
     _Items = list; 
    } 

    public IEnumerator<MyLookAlikeArchetypeFieldSet> GetEnumerator() 
    { 
     return _Items.GetEnumerator(); 
    } 

    public bool Any() 
    { 
     return _Items.Any(); 
    } 
} 

public class MyLookAlikeArchetypeModelPropertyConverter : IPropertyValueConverter 
{ 
    public object ConvertDataToSource(PublishedPropertyType propertyType, object source, bool preview) 
    { 
     return source; 
    } 

    public object ConvertSourceToObject(PublishedPropertyType propertyType, object source, bool preview) 
    { 
     try 
     { 
      var list = JsonConvert.DeserializeObject<List<MyLookAlikeArchetypeFieldSet>>(source as string); 
      return new MyLookAlikeArchetypeModel(list); 
     } 
     catch 
     { 
      return new MyLookAlikeArchetypeModel(); 
     } 
    } 

    public object ConvertSourceToXPath(PublishedPropertyType propertyType, object source, bool preview) 
    { 
     return null; 
    } 

    public bool IsConverter(PublishedPropertyType propertyType) 
    { 
     return propertyType.PropertyEditorAlias.Equals("My.Plugin.Package.Manifest.Alias"); 
    } 
} 
} 

aber die obj als leer

var obj = Model.Content.GetPropertyValue<MyLookAlikeArchetypeModel>("promo"); 

die Antwort für CurrentPage.GetPropertyValue("promo");

[ { "alias": "1", "content": "1", "img": "/media/1069/509253678.jpg" }, { "alias": "Slide 2", "content": "2", "img": "/media/1074/636609180.jpg" } ] 

jede Hilfe dankbar werden wieder

+0

YRY zu Ihren „@Funktionen Definitionen“ in einem file.cs (im Ordner App_Code zu bewegen, wenn Sie es nicht kompilieren wollen) – Eyescream

+0

Haben Sie versucht, einige Haltepunkte zu kleben oder sich in die Methoden 'IsConverter' und' ConvertSourceToObject' einzuloggen? Es wäre großartig, zuerst zu bestätigen, dass Ihr Eigenschaftswert-Converter sogar als PropertyValueConverter in Umbraco aufgenommen wird. Es gibt auch eine 'PropertyValueConverterBase', von der Sie erben können. Es erbt wiederum von der Schnittstelle 'IPropertyValueConverter' und führt nichts anderes aus, als die Schnittstelle mit einigen virtuellen Standardmethoden zu implementieren, die Sie überschreiben können. Dies wird Ihr Problem nicht lösen, aber ich mag es besser, als direkt von der Schnittstelle zu erben. – bowserm

Antwort

0

Warum deserialisieren Sie es nicht einfach.

so etwas wie diese ... (sorry nicht getestet)

 var object = JsonConvert.DeserializeObject<MyLookAlikeArchetypeModel> (archetypeValueAsString); 

     foreach (var item in object) 
     { 
      var Img = item.GetValue<string>("img"); 
     } 
Verwandte Themen