Проблема ASP.NET ObjectDataSource - PullRequest
0 голосов
/ 17 ноября 2009

Это общая структура всех моих классов:

public class User
{
    public int ID { get;set; }
    public string User_name { get; set; }
    public string Pass_word { get; set; }
    public string UserTypeCode { get; set; }

    public int SaveOrUpdate()
    {
        int id = -1;

        if (this._ID <=0)
        {
            id = this.Save();
        }
        else
        {
            bool success = this.Update();

            if(success)
            {
                id = this._ID;
            }
            else
            {
                throw new Exception("Update failed!");
            }
        }

        return id;
    }

    private int Save() { }
    private bool Update() { }
    public static User Get(int id) { }
    public static List<User> Get() { }
    public bool Delete() { }
}

Я плавно использовал эти классы с winforms.

Но при работе с ASP.NET, когда я пытаюсь настроить источник данных объекта для GridView, я не нахожу имена методов в Data Source Configuration Wizard. То есть они не появляются. Так что мои методы стали бесполезными.

Я не могу изменить эту общую структуру всех моих классов. У меня также есть генератор кода, написанный для них. И я должен использовать ObjectDataSources.

Мой первый вопрос: почему они не появляются?

И что мне делать, чтобы они появились?

Ответы [ 2 ]

3 голосов
/ 17 ноября 2009

ObjectDataSources ищет методы в указанном типе, которые соответствуют подписи имени метода обновления / вставки и предоставленных параметров обновления / вставки.

Ваш SaveOrUpdate метод находится в экземпляре класса, и ObjectDataSource не найдет подходящую сигнатуру метода.

Исходя из того, что у вас есть, если вы должны использовать ObjectDataSources, вы можете рассмотреть возможность использования метода-оболочки. Пример.

1 голос
/ 17 ноября 2009

Я не совсем уверен, но вы можете попробовать пометить этот класс DataObjectAttribute , а методы CRUD - DataObjectMethodAttribute . Я не использовал ObjectDataSource целую вечность, поэтому могу что-то забыть.

...