2016-05-03 8 views
1

私はEpiServer PageDataクラスから継承するプロパティにDBの値を動的に割り当てようとしています。ここで私が何を意味するかです:仮想プロパティreadonly - その値を変更することができません

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


    } 
} 

とコントローラに、私は次のことをしようとしている:

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

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

そして、これは私がビューに表示しようとしているものです:

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

エラーは次のとおりです。

Additional information: The property testfield is read-only 

これは私がその物が読まれていないという性質を明確に指定していても起こります...誰もその理由を知っていますか?

答えて

5

これは、ContentDataオブジェクトは常にパフォーマンス目的で読み取り専用になっているためです。 IContentRepositoryインスタンスを使用して、変更を保存するには、たとえば、あなたが変更することができ、あなたのページのインスタンスを与える

currentPage.CreateWritableClone() 

:任意のプロパティを変更するには、次のような書き込み可能なクローンを作成する必要があります。

ただし、これらのインスタンスは理由により読み取り専用です。 :)ビューに渡す個別のビューモデルを作成した方がよいでしょう。

+0

Hey @TedNyberg私はEpiserverについていくつかの研究を行いました。ほとんどのチュートリアルでは、HTMLの静的部分を処理しているだけです。彼らの誰もEpiserverを使ってDBからコンテンツを動的に管理する方法を示していませんでしたか...それともその目的ではないでしょうか?私は理解しやすくなるように、いくつかの文章でそれを要約できますか?または、おそらく私はそれについて読むことができる便利なリンクをいくつか持っています...私は彼らのユーザーマニュアルをすでに見ました... – perkes456

+0

私はworld.episerver.comがあなたの最善の策だと信じています。 –

関連する問題