If (! IsPostBack) в родительской Page_Load вызывает разрывы события Click пользовательского элемента управления. Удаление устраняет проблему, но предотвращает загрузку содержимого! - PullRequest
0 голосов
/ 18 августа 2010

Спасибо за чтение.

У меня есть пользовательский элемент управления comments.ascx.На этой странице у меня есть следующие методы:

protected override void OnInit(EventArgs e)
        {
            _presenter = new CommentsPresenter();
            _presenter.Init(this, IsPostBack);
        }

        public Comments()
        {
            WebContext = ObjectFactory.GetInstance<IWebContext>();
        }

        protected void Page_Load(object sender, EventArgs e)
        {
                if (commentPosted.Controls.Count > 0)
                    commentPosted.Controls.Clear();

                _presenter.LoadComments();

        }

        protected void BtnAddCommentClick(object sender, EventArgs e)
        {
            _presenter.AddComment(commentMark.Text);
            commentMark.Text = "";

        }

И вот кишки класса CommentsPresenter:

private IComments _view;
        private readonly ICommentRepository _commentRepository;
        private readonly IWebContext _webContext;

        public CommentsPresenter()
        {
            _commentRepository = ObjectFactory.GetInstance<ICommentRepository>();
            _webContext = ObjectFactory.GetInstance<IWebContext>();
        }

        public void Init(IComments view, bool isPostBack)
        {
            _view = view;

            _view.ShowCommentBox(_webContext.CurrentUser != null);
        }

        public void LoadComments()
        {
            _view.LoadComments(_commentRepository.GetCommentsBySystemObject(_view.SystemObjectId,
                                                                             _view.SystemObjectRecordId));    
        }

        public void AddComment(string comment)
        {
            if (_webContext != null)
            {
                var c = new Comment
                            {
                                Body = comment,
                                CommentByAccountId = _webContext.CurrentUser.AccountId,
                                CommentByUserName = _webContext.CurrentUser.UserName,
                                CreateDate = DateTime.Now,
                                SystemObjectId = _view.SystemObjectId,
                                SystemObjectRecordId = _view.SystemObjectRecordId
                            };
                _commentRepository.SaveComment(c);
            }
            _view.ClearComments();
            LoadComments();

        }

У меня также есть страница Updates.aspx (которая ссылается наКомментарии пользовательского контроля).На этой странице у меня есть следующее:

protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (_webContext.AccountId > 0)
                    _presenter.Init(this, _webContext.AccountId);
                else if (_userSession.CurrentUser != null)
                    _presenter.Init(this, _userSession.CurrentUser.AccountId);
            }
        }

protected void BtnAddStatusClick(object sender, EventArgs e)
    {
        var id = default(int);

        if (_webContext.AccountId > 0)
            id = _webContext.AccountId;
        else if (_userSession.CurrentUser != null)
            id = _userSession.CurrentUser.AccountId;

        var su = new StatusUpdate
                     {
                         CreateDate = DateTime.Now,
                         AccountId = id,
                         Status = updateText.Text
                     };

        _statusRepository.SaveStatusUpdate(su);
        _alertService.AddStatusUpdateAlert(su);

        _presenter.Init(this, id);


    }

Проблема, с которой я сталкиваюсь заключается в том, что когда я добавляю if (! IsPostBack) к вышеупомянутому событию Page_Loadи обновите мой статус, тогда все комментарии на странице будут очищены.Но когда я удаляю if (! IsPostBack) , комментарии обновляются, когда я обновляю свой статус, но кнопка отправки в моем пользовательском элементе управления Comments не срабатывает!

Я не динамическидобавив свой пользовательский элемент управления, поэтому я не думаю, что это проблема приоритета.Я не могу понять это.Любая идея, что происходит?

Спасибо за вашу помощь / предложения / советы ...

1 Ответ

0 голосов
/ 18 августа 2010

Вам нужно привязывать данные при каждом круговом цикле, потому что ваши элементы управления не сохраняют состояние просмотра, а ваша отправка - потому что это ImageButton или LinkButton?

Мне надоело читать все это (извините, короткий интервал концентрации).

Вот что, я думаю, могло бы произойти:

1) Вам необходимо DataBind при каждом круговом цикле, потому что ваш элемент управления не сохраняет состояние просмотра, поэтому вы не можете использовать if (!IsPostBack), потому чтоон не привязывается при обратной передаче, поэтому не отображает никаких данных при возврате страницы.

2) Поскольку вы постоянно подключаете кнопку отправки при загрузке страницы, она не срабатывает, потому что вы 'на самом деле все время перезагружаю вашу страницу.

Конечно, я могу ошибаться ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...