我试图动态地将DB中的值分配给继承自EpiServer PageData类的属性。这就是我的意思:
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
即使我明确指出该资产不是只读的,也会发生这种情况......有谁知道为什么?
答案 0 :(得分:6)
这是因为 ContentData 对象始终是只读的,以达到性能目的。要更改任何属性,您必须创建可写克隆,如:
currentPage.CreateWritableClone()
这将为您提供可以更改的页面实例,例如使用 IContentRepository 实例保存更改。
但请注意,由于某种原因,这些实例是只读的。 :)最好创建一个传递给视图的单独视图模型。