2012-04-16 3 views
3

Я работаю в веб-приложении ASP.NET Dynamic Data и имею проблему передачи значения по умолчанию при вставке/обновлении записей. В моем приложении вся таблица имеет следующую общий столбец:веб-сайт динамических данных asp.net: передача значения по умолчанию при вставке/обновлении записей

  • CreatedBy (Значение по умолчанию: Помнить пользователь)
  • CreatedDate (Значение по умолчанию: DateTime.Now)
  • ModifiedBy (Значение по умолчанию: Помнить пользователь)
  • ModifiedDate (значение по умолчанию: DateTime.Now)

Я хочу, чтобы эти колонки шкурки в Insert и Edit страницу и хочу, чтобы значение по умолчанию будет вставлена ​​АВТОМАТИКА в соответствующей колонке.

Пожалуйста, предложите мне.

Благодаря Пол

ответ

0

решение я реализовал наконец:

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); 
    } 
+0

Более подробное объяснение того, что вы делаете: [Обновление значений до вставки на веб-сайте динамических данных ASP.NET с использованием платформы Entity Framework] (http://batesits.com/tag/dynamic-data/) – ofthelit

0

Ref:
Maintaining a Log of Database Changes - Part 1

Для того, чтобы сохранить историю изменений данных в базах, мы нужно записывать каждую вставки, обновления и удаления некоторых сорт "история" стол. В дополнение к захвату данных, которые были вставлены, обновлен или удален, мы также должны отметить, что пользователь внес изменения , а также дату и время его создания.

Подробнее Артикул:

Best design for a changelog/auditing database table?
Log changes to database table with trigger

Чтобы настроить ORM Entity Framework проверки следующие ссылки:

How to use Default column value from DataBase in Entity Framework?
How to: Execute Business Logic When Saving Changes

+0

спасибо за ваш быстрый ответ. Для истории у нас есть отдельная таблица транзакций. что мне нужно, я полагаю, что я не хочу отображать столбец во вставке/редактировании страницы динамических данных, даже если этот столбец не равен NULL на уровне DB. Теперь, вставляя/обновляя запись этого объекта, я хочу передать какое-то значение по умолчанию в запросе на вставку/обновление. – Paul

+0

Ок .. Когда вы создаете таблицы, тогда указываете значение по умолчанию для столбцов или используйте хранимую процедуру, определяющую значения по умолчанию .... –

+0

.. не помогли решить мою проблему >>> – Paul

2

Я вижу, что вы делаете простой аудит, посмотрите мой блог здесь Basic Auditing for Dynamic Data with Entity Framework 4.x надеюсь, что это поможет.

Никогда не бывает хорошо делать подобные вещи на странице, всегда лучше всего делать это в вашей модели данных/слое. Вы можете использовать мой A New Way To Do Column Generation in Dynamic Data ..., чтобы скрыть столбцы на всех страницах.

+0

Для аудита мы использовали аудит sqlserver 2008. Я просто хотел скрыть это поле от пользовательского интерфейса. Поскольку createdby/CreatedDate является обязательным полем в БД с использованием scaffolding = false, это было невозможно. Наконец, я разрешил его, добавив это поле/значение в событие FormView1_ItemInserting. В любом случае спасибо за информацию. Я прочитал номер статьи, написанной вами по DD, и получил большую помощь. Большое спасибо >> – Paul

0

Моего решения немного отличается от требований Павла.

В файле DynamicData \ 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; 
    } 
    [...] 
} 

Для редактирования записей с существующими значениями, я внес изменения в некоторые DynamicData \ FieldTemplates файлов.

public partial class Text_EditField : System.Web.DynamicData.FieldTemplateUserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     // ... 

     // show current user as value for the modification user upon editing records 
     if (Column.Name == "modificationUser") 
     { 
      FieldValue = Page.User.Identity.Name.Substring(Page.User.Identity.Name.IndexOf("\\") + 1); 
     } 
    } 
    [...] 
} 

Он покажет обновленное значение на странице для редактирования, но после обновления изменения не будут сохраняться! Требуется дополнительное изменение шаблона страницы редактирования:

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; 
     } 
    }