2016-05-03 14 views
1

Ich versuche, einen Wert aus der DB dynamisch einer Eigenschaft zuzuordnen, die von der EpiServer PageData-Klasse erbt. Hier ist, was ich meine:Virtuelle Eigenschaft schreibgeschützt - Wert kann nicht geändert werden

namespace Episerver9.Models.Pages 
{ 
    [ContentType] 
    public class StartPage : PageData 
    { 
     public virtual string Username { get; set; } 
     public virtual string Password { get; set; } 
     public virtual string FirstName { get; set; } 
     public virtual string LastName { get; set; } 

     [ReadOnly(false)] 
     [Editable(true)] 
     public virtual string testfield { get; set; } 


    } 
} 

Und Controller Ich versuche folgendes:

namespace Episerver9.Controllers 
{ 
    public class StartPageController : PageController<StartPage> 
    { 
     // GET: StartPage 

     public ActionResult Index(StartPage currentPage) 
     { 
      currentPage.testfield = "test"; 
      return View(currentPage); 
     } 
    } 
} 

Und das ist, was ich versuche in der Ansicht angezeigt:

@Html.PropertyFor(x=>x.testfield) 
// Trying to dynamically populate the data from code, later on from DB 

Der Fehler, den ich bekomme, ist:

Additional information: The property testfield is read-only 

Dies passiert sogar, obwohl ich klar für die Eigenschaft angegeben habe, dass ES NICHT nur gelesen wird ... Weiß jemand warum?

Antwort

5

Dies liegt daran, ContentData Objekte sind immer nur für Leistungszwecke schreibgeschützt. Um alle Eigenschaften zu ändern, müssen Sie einen beschreibbaren Klon erstellen wie:

currentPage.CreateWritableClone() 

, dass Sie eine Instanz Ihrer Seite geben, die Sie ändern können, zum Beispiel die Änderungen zu speichern eine IContentRepository Instanz verwenden.

Beachten Sie jedoch, dass diese Instanzen aus einem bestimmten Grund schreibgeschützt sind. :) Sie erstellen besser ein separates Ansichtsmodell, das Sie an Ihre Ansicht übergeben.

+0

Hey @TedNyberg Ich habe einige Nachforschungen über Episerver gemacht, und die meisten Tutorials zeigen nur den statischen Teil des HTML. Keiner von ihnen hat gezeigt, wie man Inhalt von DB mit Episerver dynamisch verwaltet ... Oder ist das vielleicht nicht sein Zweck? Kannst du es in wenigen Sätzen zusammenfassen, damit ich es besser verstehe? Oder haben Sie vielleicht ein paar nützliche Links, wo ich darüber lesen konnte ... Ich habe ihre Bedienungsanleitung bereits durchgelesen ... – perkes456

+0

Ich glaube world.episerver.com ist Ihre beste Wette, sie enthält jede Menge nützlicher Informationen! –