gpt4 book ai didi

c# - 只读虚拟属性 - 无法更改其值

转载 作者:太空宇宙 更新时间:2023-11-03 18:24:53 25 4
gpt4 key购买 nike

我正在尝试将数据库中的值动态分配给继承自 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; }


}
}

在 Controller 中我正在尝试以下操作:

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

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

这就是我要在 View 中显示的内容:

@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

即使我为该属性明确指定它不是只读的,也会发生这种情况...有人知道为什么吗?

最佳答案

这是因为 ContentData 对象出于性能目的始终是只读的。要更改任何属性,您必须创建一个可写克隆,例如:

currentPage.CreateWritableClone()

这将为您提供一个您可以更改的页面实例,例如使用 IContentRepository 实例保存更改。

但是,请注意这些实例是只读的是有原因的。 :) 您最好创建一个传递给 View 的单独 View 模型。

关于c# - 只读虚拟属性 - 无法更改其值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37005571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com