好的……在 Sitecore 支持的帮助下,我终于得到了这个问题的答案。为了让页面编辑器获取字段的新值,需要调用 Sitecore.WebEdit.setFieldValue() javascript 函数。这将创建一个隐藏的输入字段,然后当单击“保存”或“保存/关闭”按钮时 PageEditor 会读取该字段。
//RenderItem is the item in question, DropListField is the string name of
//the target Droplist field we want rendered
string itemID = RenderItem.ID.ToShortID().ToString();
string fieldID = RenderItem.Fields[DropListField].ID.ToShortID().ToString();
string language = RenderItem.Language.ToString();
string version = RenderItem.Version.ToString();
string revision = RenderItem[FieldIDs.Revision].Replace("-", string.Empty);
ddlList.Attributes.Add("onchange", string.Format("var ddl = getElementById('{5}');var itemURI = new Sitecore.ItemUri('{0}','{1}','{2}','{3}');Sitecore.WebEdit.setFieldValue(itemURI,'{4}',ddl.options[ddl.selectedIndex].value);",itemID,language,version,revision,fieldID,ddlList.ClientID));
所以,基本上我们只是为 DropDownList 添加一个客户端 onchange 处理程序,它调用这个 Sitecore js 函数。注意:我相信这需要 Sitecore 6.2。