我创建了一个分部类来扩展默认的spmetal类来处理发布html字段。如下所述:
扩展对象关系映射
public partial class RelatedLinksItem : Item, ICustomMapping
:中的代码段
/// <summary>
/// Read only data is retrieved in this method for each extended SPMetal field
/// Used to Read - CRUD operation performed by SPMetal
/// </summary>
/// <param name="listItem"></param>
[CustomMapping(Columns = new string[] { CONTENT_FIELDtesthtml, CONTENT_FIELDLink })]
public void MapFrom(object listItem)
{
SPListItem item = (SPListItem)listItem;
// link
this.ContentLink = item[CONTENT_FIELDLink] as LinkFieldValue;
// html (does NOT work)
HtmlField html = item[CONTENT_FIELDtesthtml] as HtmlField; // this returns null
// html (does work)
HtmlField html2 = (HtmlField)item.Fields.GetFieldByInternalName(CONTENT_FIELDtesthtml); // this returns object
this.Contenttesthtml = html2;
this.TestHtml = html2.GetFieldValueAsText(item[CONTENT_FIELDtesthtml]); // set property for rendering html
}
"Web部件"中的代码段:
protected override void CreateChildControls()
{
using (OrganisationalPoliciesDataContext context = new OrganisationalPoliciesDataContext(SPContext.Current.Web.Url))
{
var results = from links in context.RelatedLinks
select links;
foreach (var link in results)
{
// render link
Controls.Add(new LiteralControl(string.Format("<p>Link: {0}</p>", link.ContentLink)));
// render html
Controls.Add(new LiteralControl(string.Format("<p>HTML: {0}</p>", link.TestHtml)));
}
}
}
两个问题:
- 为什么
HtmlField html = item[CONTENT_FIELDtesthtml] as HtmlField;
返回null
,但item.Fields.GetFieldByInternalName
工作正常 - 有没有办法从内部使用
GetFieldValueAsText
方法webpartor是将值存储在自定义中的方法用于以后访问的属性是否可接受
-
您正在将字段值
item[CONTENT_FIELDtesthtml]
强制转换为类型HtmlField
。但是HtmlField
表示字段的类型,而不是字段值的类型。因此,CCD_ 9将被分配有CCD_ 10。有关所有发布字段类型和值类型的引用,请查看此MSDN页
我不确定HtmlField
的字段值类型是什么。可能只是string
因此,您应该安全地将其转换为字符串:string html = Convert.ToString(item[CONTENT_FIELDtesthtml]);
-
我认为将价值储存在房地产中是可行的。这样可以实现数据层和表示层的分离。