Telerik grid вставляет одну и ту же запись более чем в одну - PullRequest
0 голосов
/ 13 ноября 2011

Сегодня я столкнулся с действительно странной ситуацией.

Я использую Telerik 2011.2.712 для ASP.NET MVC3 с Razor в качестве движка просмотра. У меня также есть NHibernate для уровня данных.

У меня есть простая сетка для добавления - обновления - удаления и просмотра простой сущности.

@(Html.Telerik().Grid<SectorGridItem>()
    .Name("SectorList")
    .DataBinding(dataBinding => dataBinding
                .Ajax()
                .Select("Select", "Sector")
                .Insert("Insert", "Sector")
                .Update("Update", "Sector")
                .Delete("Delete", "Sector")
            )
            .ToolBar(commands => commands.Insert())
    .DataKeys(keys => keys.Add(c => c.Id))
    .Columns(columns =>
                 {
                     columns.Bound(o => o.Id).Hidden();
                     columns.Bound(o => o.Name);
                     columns.Command(commands =>
                     {
                         commands.Edit();
                         commands.Delete();
                    }).Width(200).Title("Command?");
                 })
    .Sortable()
    .Pageable(p => p.PageSize(20))
    )

Контроллеры и действия тоже довольно просты:

    [GridAction]
    public ActionResult Select()
    {
        return View(new GridModel(GridHelper.GetList<Sector, SectorGridItem>()));
    }

    [HttpPost]
    [GridAction]
    public ActionResult Insert()
    {
        ISession session = DB.CurrentSession;
        using (ITransaction tx = session.BeginTransaction())
        {
            Sector item = new Sector();

            if (TryUpdateModel(item))
            {
                session.Save(item);
                tx.Commit();
            }
            else
                tx.Rollback();
        }
        return View(new GridModel(GridHelper.GetList<Sector, SectorGridItem>()));
    }

    [HttpPost]
    [GridAction]
    public ActionResult Update(int id)
    {
        ISession session = DB.CurrentSession;
        using (ITransaction tx = session.BeginTransaction())
        {
            Sector item = new Sector();

            if (TryUpdateModel(item))
            {
                session.Update(item);
                tx.Commit();
            }
            else
                tx.Rollback();
        }
        return View(new GridModel(GridHelper.GetList<Sector, SectorGridItem>()));
    }

    [HttpPost]
    [GridAction]
    public ActionResult Delete(int id)
    {
        ISession session = DB.CurrentSession;
        using (ITransaction tx = session.BeginTransaction())
        {
            session.Delete(session.Get<Sector>(id));
            tx.Commit();
        }
        return View(new GridModel(GridHelper.GetList<Sector, SectorGridItem>()));
    }

Где GridHelper возвращает все сектора в БД. У меня нет проблем с «Выбрать» и «Удалить» записей.

Когда я вставляю запись, она успешно вставляет ее в БД. Когда я вставляю вторую запись, она добавляет первую запись и вторую запись.

Например: добавление «Первый», «Второй», «Третий» в порядке, результат становится

  • Первый
  • Первый
  • Второй
  • Первый
  • Второй
  • Третий

Я не могу найти ни причины такого поведения, ни каких-либо решений.

...