C# ASP.NET动态数据编辑复杂对象
我正在开发一个ASP.NET动态数据网站,该网站具有Linq到SQL数据库上下文,我有一个问题。在我的一个表ARReports中,存在一个包含原始XML数据的列,我可以将其反序列化为ReportDetails对象,以及其他数据,如EditedBy、ReleaseDate和其他字段 ReportDetails有几个公共属性,我想在custom Edit.aspx页面上公开这些属性 我的目标是:当用户导航到Edit.aspx页面时,我希望他们能够编辑ARReports行和ReportDetails的公共属性,所有这些都是primative类型。然后在更新时:将ReportDetails对象序列化回XML并更新表中的该字段 我是否可以说,在ReportDetails类型的ARReport类(Linq to SQL类)中创建一个属性,并将该类scaffold放入Edit.aspx页面?可能是这样的:C# ASP.NET动态数据编辑复杂对象,c#,asp.net,.net,asp.net-dynamic-data,complextype,C#,Asp.net,.net,Asp.net Dynamic Data,Complextype,我正在开发一个ASP.NET动态数据网站,该网站具有Linq到SQL数据库上下文,我有一个问题。在我的一个表ARReports中,存在一个包含原始XML数据的列,我可以将其反序列化为ReportDetails对象,以及其他数据,如EditedBy、ReleaseDate和其他字段 ReportDetails有几个公共属性,我想在custom Edit.aspx页面上公开这些属性 我的目标是:当用户导航到Edit.aspx页面时,我希望他们能够编辑ARReports行和ReportDetails的
public partial class ARReport
{
private ReportDetails _details;
public ReportDetails Details
{
get
{
if (_details == null)
_details = ReportDetails.DeSerialize(this.RawXML);
return _details;
}
set
{
this.RawXML = ReportDetails.Serialize(_details);
}
}
public class ReportDetails
{
public String Owner {get; set;}
public DateTime LastEdit {get; set;}
//...etc...
public static String Serialize(ReportDetails report)
{
// serialization code
}
public static ReportDetails DeSerialize(String rawXML)
{
// deserialization code
}
}
我希望有一些属性和/或技巧的组合可以应用于类和属性,以实现我所寻找的,但到目前为止,严格的谷歌搜索还没有提供任何解决方案。我希望这不会太令人困惑。我感谢任何帮助或见解。这是可以做到的。考虑将RePrimeDebug的属性保留在L2S数据上下文中(因为它不是明确地在DB中,除非是一列)。 我的建议是为报表详细信息构建一个自定义字段模板。使用UIHintAttribute在“编辑/详细信息”页面上正确引用该字段模板。在填充控件之前,将报告详细信息反序列化到POCO中,并按照常规填充控件 就序列化而言,在datacontext中覆盖SubmitChanges事件,检查ARReport的更新,更改属性值,然后提交更改:
public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{
ChangeSet changeset = GetChangeSet();
foreach (var change in changeset.Updates.OfType<ARReport>())
{
// serialize ReportDetails here before submitting changes.
}
try
{
base.SubmitChanges(ConflictMode.ContinueOnConflict);
}
catch (ChangeConflictException cce)
{
// handle this
}
}
公共覆盖无效提交更改(System.Data.Linq.ConflictMode故障模式)
{
ChangeSet ChangeSet=GetChangeSet();
foreach(changeset.Updates.OfType()中的var change)
{
//在提交更改之前,在此处序列化ReportDetails。
}
尝试
{
base.SubmitChanges(ConflictMode.ContinueOnConflict);
}
捕获(ChangeConflictException cce)
{
//处理这个
}
}
谢谢你的建议。我以前从未使用或查看过UIHINTAT贡品。我会看看我是否可以在我的项目中使用这个,然后标记这个作为回答,如果它解决了以后。