Отладка событий GridView / ObjectDataSource - PullRequest
2 голосов
/ 20 декабря 2011

Ahoy!

Я использую элемент управления ASP.NET GridView, связанный с ObjectDataSource:

<asp:ObjectDataSource ID="Things" runat="server"
    TypeName="BLL.Thing"
    UpdateMethod="UpdateThing"
    OnUpdating="Things_Updating"
    OnUpdated="Things_Updated">
    <UpdateParameters>
        <asp:SessionParameter
            Name="userContext"
            SessionField="UserContext"
            Type="Object" />
        <asp:Parameter Name="thing" Type="Object" />
    </UpdateParameters>
</asp:ObjectDataSource>

При нажатии на элемент управления ImageButton с CommandName = "Update" происходит указанное событие OnUpdatingпроисходить, но не в указанном UpdateMethod или событии OnUpdated.

<EditItemTemplate>
    <asp:ImageButton ID="ImageButton_Save" runat="server"
        CommandName="Update"
        SkinID="Save"
        CausesValidation="false"
        CommandArgument='<%# Eval("Id") %>' />
    <asp:ImageButton ID="ImageButton_Cancel" runat="server"
        CommandName="Cancel"
        SkinID="Cancel"
        CausesValidation="false" />
</EditItemTemplate>

Входные параметры определены в событии OnUpdating следующим образом:

protected void Things_Updating(object sender, ObjectDataSourceMethodEventArgs e)
{
    e.InputParameters["thing"] = _theThing;
}

Нет исключений.Страница только отправляет назад с элементами управления EditItemTemplate, все еще показывающими.Я могу поставить точки останова повсюду, но след останавливается в конце Things_Updating.Кажется, что происходит какое-то исключение, которое не обрабатывается и не перехватывается отладчиком.Есть ли способ открыть капот и посмотреть, что ASP.NET делает (или не делает)?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 20 декабря 2011

BLL.Thing.UpdateThing() выполняется? Это должно произойти после Things.Updating и быть легко отлаживаемым. Также, если есть что-то, вызывающее исключение, это, вероятно, так.

Edit:

Попробуйте добавить параметр в обработчик для GridView.RowUpdating вместо ObjectDataSource.Updating. Вот как я обычно это делаю. Я думаю, вам нужно получить DataSourceView для изменения параметров обновления в событии ObjectDataSource. (См .: Ошибка вставки таблицы объектов ObjectDataSource с пустым словарем значений )

protected void gridThings_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    e.NewValues.Add("thing", _theThing);
}
1 голос
/ 20 декабря 2011

На ум приходят две вещи, которые могут привести к немедленному прекращению процесса:

  1. Вы также обработали событие GridView.RowUpdating и установите для свойства GridViewUpdateEventArgs.Cancel значениеправда.Примерно так:

    protected void myGridView_RowUpdating(Object sender, GridViewUpdateEventArgs e)
    {
        e.Cancel = true;
    }
    
  2. Вы сделали нечто подобное в событии ObjectDataSource.Updating, установив для свойства ObjectDataSourceMethodEventArgs.Cancel значение false.Например:

    private void myObjectDataSource_Updating(object source, ObjectDataSourceMethodEventArgs e)
    {
        e.Cancel = true;
    }
    

Любой из них остановит процесс обновления, что приведет к тому, что вы описываете.

...