per*_*456 1 c# properties episerver readonly
我正在尝试动态地将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; }
}
}
Run Code Online (Sandbox Code Playgroud)
在控制器中我正在尝试以下方法:
namespace Episerver9.Controllers
{
public class StartPageController : PageController<StartPage>
{
// GET: StartPage
public ActionResult Index(StartPage currentPage)
{
currentPage.testfield = "test";
return View(currentPage);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我想在视图中显示的内容:
@Html.PropertyFor(x=>x.testfield)
// Trying to dynamically populate the data from code, later on from DB
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
Additional information: The property testfield is read-only
Run Code Online (Sandbox Code Playgroud)
即使我明确指出该属性不是只读的,也会发生这种情况......有谁知道为什么?
这是因为ContentData对象始终是只读的,以达到性能目的.要更改任何属性,您必须创建一个可写克隆,如:
currentPage.CreateWritableClone()
Run Code Online (Sandbox Code Playgroud)
这将为您提供可以更改的页面实例,例如使用IContentRepository实例保存更改.
但请注意,这些实例是只读的原因.:)最好创建一个传递给视图的单独视图模型.