asp.net动态数据网站:插入/更新记录时传递默认值

asp.net动态数据网站:插入/更新记录时传递默认值,asp.net,asp.net-dynamic-data,Asp.net,Asp.net Dynamic Data,我在ASP.NET动态数据web应用程序中工作,在插入/更新记录时遇到传递默认值的问题。在我的应用程序中,所有表都有以下公共列: CreatedBy(默认值:登录用户) CreatedDate(默认值:DateTime.Now) modifiedBy(默认值:登录用户) ModifiedDate(默认值:DateTime.Now) 我希望将这些列隐藏在Insert和Edit页面中,并希望默认值将自动插入相应的列中 请推荐我 谢谢 保罗参考: 为了维护数据库数据更改的历史记录,我们 需要将每

我在ASP.NET动态数据web应用程序中工作,在插入/更新记录时遇到传递默认值的问题。在我的应用程序中,所有表都有以下公共列:

  • CreatedBy(默认值:登录用户)
  • CreatedDate(默认值:DateTime.Now)
  • modifiedBy(默认值:登录用户)
  • ModifiedDate(默认值:DateTime.Now)
我希望将这些列隐藏在
Insert
Edit
页面中,并希望默认值将自动插入相应的列中

请推荐我

谢谢 保罗

参考:

为了维护数据库数据更改的历史记录,我们 需要将每次插入、更新和删除记录到某种程度 “历史”表。除了捕获插入的数据, 更新或删除,我们还需要注意用户所做的 修改,以及修改的日期和时间

更多参考:


要自定义ORM实体框架,请检查以下链接:



我看到你在做简单的审计,看看我在这里的博文,希望对你有所帮助


在页面中执行此类操作从来都不是好事,最好在数据模型/层中执行。您可以使用my隐藏所有页面中的列。

我最终实现的解决方案:

protected void FormView1_ItemInserting(object sender, FormViewInsertEventArgs e)
   {
      e.Values.Add("CreatedBy", HttpContext.Current.User.Identity.Name);
      e.Values.Add("CreatedDate", DateTime.Now);
    }

 protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e)
    {
      e.OldValues.Add("ModifiedBy", null);
      e.OldValues.Add("ModifiedDate", null);
      e.NewValues.Add("ModifiedBy", HttpContext.Current.User.Identity.Name);
      e.NewValues.Add("ModifiedDate", DateTime.Now);
   }

我的解决方案与Paul的要求有点不同

在文件dynamicata\PageTemplates\Insert.aspx.cs中,我进行了编辑,以显示具有共享字段的任何表中新记录的默认值。用户仍然可以在插入时插入其他内容

public partial class Insert : System.Web.UI.Page
{
    protected MetaTable table;

    protected void Page_Init(object sender, EventArgs e)
    {
        table = DynamicDataRouteHandler.GetRequestMetaTable(Context);
        var values = table.GetColumnValuesFromRoute(Context);

        // set default values for meta data of new records across all tables
        // unknown values will be skipped
        values.Add("creationDate", DateTime.Now);
        values.Add("modificationDate", DateTime.Now);
        values.Add("modificationUser", HttpContext.Current.User.Identity.Name.Substring(
            HttpContext.Current.User.Identity.Name.IndexOf("\\") + 1));

        FormView1.SetMetaTable(table, values);
        DetailsDataSource.EntityTypeFilter = table.EntityType.Name;
    }
    [...]
}
为了编辑具有现有值的记录,我对一些DynamicATA\FieldTemplates文件进行了更改

它将在页面上显示更新后的值以供编辑,但更新后的更改不会持续!需要对编辑页面模板进行其他更改:

    protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e)
    {
        // make sure a meta data update is always triggered by setting a different old value
        // required for the edit components
        if (e.OldValues.Contains("modificationUser"))
        {
            e.OldValues["modificationUser"] = string.Empty;
            e.OldValues["modificationDate"] = DateTime.MinValue;
        }
    }

谢谢你的快速回复。对于历史记录,我们有单独的事务表。我需要的是假设我不想在插入/编辑动态数据页面中显示一列,即使该列在DB级别不是NULL。现在,在插入/更新该实体的记录时,我想在insert/update query.Okk.中传递一些默认值。当您创建表时,请为列指定默认值,或使用指定默认值的存储过程…无法在表中指定默认值,因为createdby/modified是变量(loggedin user)。我正在使用DynamicATA,EF和DD会自动执行插入/更新作业,因此没有编写SP的范围。DD中是否有任何解决方法???检查实体框架的添加链接以获取此主题的参考。对于审核,我们使用了sqlserver 2008审核。我只是想对UI隐藏这些字段。因为createdby/CreatedDate是数据库中的必填字段,所以不可能使用scaffolding=false。最后,我通过在FormView1\u ItemInserting事件中添加这些字段/值来解决这个问题。无论如何,谢谢你提供的信息。我已经读了很多你在DD上写的文章,并且得到了很多帮助。非常感谢>>关于您正在做的事情的更透彻的解释:
    protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e)
    {
        // make sure a meta data update is always triggered by setting a different old value
        // required for the edit components
        if (e.OldValues.Contains("modificationUser"))
        {
            e.OldValues["modificationUser"] = string.Empty;
            e.OldValues["modificationDate"] = DateTime.MinValue;
        }
    }