Ho fatto un aumento su EPiServer 7 MVC e ho analizzato Joel Abrahamsson's Alloy MVC Template. Dopo aver dato un'occhiata al controller di anteprima personalizzato, che prevede l'anteprima di un blocco in 4 diverse "dimensioni" che potrebbero essere renderizzate, ho avuto l'idea di creare una proprietà specifica per un determinato "formato" in modo che il testo dell'intestazione, per esempio, potrebbe visualizzare diversi contenuti in base alla "dimensione" che il blocco esegue. Essenzialmente, questo sarebbe un dizionario in cui la chiave è la "dimensione" e il valore conterrebbe il contenuto della stringa.EPiServer 7 - Tipo di proprietà personalizzata basato sul dizionario
Qualcuno ha creato una proprietà di questo tipo?
Ho provato alcuni approcci e hanno ottenuto bloccato con ciascuno di essi:
misura Tipo di proprietà/custom tipo di valore. Seguendo questo esempio sulla creazione di tipi di proprietà personalizzate (http://joelabrahamsson.com/creating-a-custom-episerver-property-with-a-custom-class-as-value/) ho creato un tipo di proprietà personalizzata (PropertyDicitionaryString) e un tipo di valore personalizzato (DictionaryString). Posso visualizzare il valore fine implementando un modello di visualizzazione che riceve un tag con le dimensioni e quindi rende Model.MyDictionaryString [ViewData ["Tag"] come stringa]. Tuttavia, non ho capito come far funzionare la modifica in linea, poiché una chiamata a @ Html.EditAttributes (x => x.MyDictionaryString [ViewData ["Tag"] come stringa]) non è supportata; quel metodo non supporta le chiamate di indice o di metodo nell'espressione lambda). Qualcuno sa come creare un tale editor in linea?
Tipo di proprietà personalizzata/tipo primitivo. Ho rielaborato il mio tipo di proprietà personalizzata per sopra, chiamiamolo (PropertyDictionaryStringAsPrimitive) in modo che la proprietà Value restituisca una stringa. Questo mi permette di definire il mio modello come:
[BackingType(typeof(PropertyDictionaryStringAsPrimitive)] public virtual string SizeSpecificString{get;set;}
ho dovuto incidere in un modo per il PropertyDictionaryStringAsPrimitive per ricevere la 'dimensione' nel contesto di rendering corrente quando è il metodo valore è stato chiamato per assicurarsi che ha restituito il valore corretto. Sono riuscito a farlo implementando un ContentDataInterceptor personalizzato, che cerca le chiamate a PropertyDictionaryStringAsPrimitive.Value e imposta la chiave in modo appropriato. Quindi ora mostra che il valore funziona bene, ma anche la modifica in linea non funziona. Quando viene effettuata la chiamata di salvataggio ajax, devo aggiungere alcune informazioni di stato in modo da poter dire a PropertyDictionaryStringAsPrimitive quale chiave utilizzare per salvare le modifiche in. Qualcuno sa come passare ulteriori informazioni di stato indietro durante una modifica in linea richiesta di salvataggio ajax?
Ho dato un'occhiata all'attributo
[CultureSpecific]
. Sarebbe interessante se potessi usare un meccanismo simile a CultureSpecific per mantenere istanze specifiche dei valori 'dimensionali'. Dopo aver trascorso un po 'di tempo in un decompilatore che cerca di elaborare hwo CultureSpecific funziona con la sua magia, ho rintracciato l'attributo a CotnentDataAttributeScanningAssigner.AssignValuesToPropertyDefinition impostando il flag PropertyDefinitionModel.CultureSpecific su true, che PropertyDefinitionSynchronizer.CreatePropertyDefintion utilizza per impostare PropertyDefintiionModel.CultureSpecificValue su un Enum. Ma non sono riuscito a scoprire come questa impostazione influenzi quale valore viene caricato. Qualcuno sa come utilizzare un attributo del livello di proprietà per modificare il valore in modo dinamico?
sarebbe questo richiedere il Contenuto Redattori per creare un blocco doganale per dimensione, o potrei dire solo 3 caselle di testo (desktop, tablet, telefono)? –
È possibile creare un tipo di blocco con 3 proprietà stringa, quindi utilizzare tale tipo di blocco come tipo di proprietà del contenuto. In questo modo otterresti 3 proprietà di stringa raggruppate nell'interfaccia utente e quindi le visualizzi in modo appropriato per la visualizzazione per dispositivi diversi. –
Non hai un campione di codice per caso? –