C# ASP.NET动态数据编辑复杂对象

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的

我正在开发一个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页面?可能是这样的:

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贡品。我会看看我是否可以在我的项目中使用这个,然后标记这个作为回答,如果它解决了以后。