Плохой элемент списка Отправить логику в Sandbox Solution - PullRequest
0 голосов
/ 12 декабря 2011

У меня есть веб-часть для управления комментариями, касающимися текущих рекламных акций. Веб-часть размещена в Sandbox Solution, поскольку доступ к любому серверу ограничен (// sharepoint)

У меня есть две основные проблемы с моим кодом.

1: отправленные элементы не отображаются после обратной передачи, в результате чего пользователь думает, что его комментарии не были сохранены,

2: данные PostBack обновляются после обновления страницы, то есть, если пользователь обновляет его в надежде увидеть свои комментарии, он повторно отправляется и сохраняется.

Что я здесь не так делаю?

public string OfferID { get; set; }
protected void Page_Load(object sender, EventArgs e)
        {
            OfferID = Context.Request.QueryString["ItemID"];
            LoadOffers();
        }

protected void LoadOffers()
        {
            if (!String.IsNullOrEmpty(OfferID))
            {
                PopulateOfferDetails(OfferID);
                PopulateComments(OfferID);
                PopulateBestPractices(OfferID);
            }
            else
            {
                OfferID = "123";
                PopulateOfferDetails(OfferID);
                PopulateComments(OfferID);
                PopulateBestPractices(OfferID);
            }
        }

protected void PopulateComments(string offerID)
    {
        rcOiD.InnerText += " " + offerID;

        List<Comment> Comments = new List<Comment>();
        SPList TargetList = web.Lists.TryGetList("Offer Comments");
        SPQuery query = new SPQuery();
        query.RowLimit = 100;
        query.Query = "<Where><Eq><FieldRef Name=\"OfferID\"/><Value Type=\"Text\">" + offerID + "</Value></Eq></Where>";
        try
        {
            SPListItemCollection items = TargetList.GetItems(query);
            if (items.Count > 0)
            {
                commentsCount.InnerText = items.Count.ToString();
                SPUser user = web.CurrentUser;
                string alias = user.Email.Substring(0, user.Email.IndexOf('@'));
                string profilePicBase = "<div class=\"profilePic\" " + "style=\"background-image:url('http://who/Photos/XX.jpg');\"" + ">&nbsp;</div>";
                foreach (SPListItem item in items)
                {
                    Comment c = new Comment();
                    c.Author = ((string)item["Created By"]).CleanUserName();
                    c.Body = (string)item["Body"];
                    c.Date = String.Format("{0:MMM dd, yyyy}", (DateTime)item["Created"]);
                    c.ProfilePic = profilePicBase.Replace("XX", alias);

                    Comments.Add(c);
                }
                Comments.Reverse();
                CommentRepeater.DataSource = Comments;
                CommentRepeater.DataBind();
            }
            else
            {
                commentsCount.InnerText = "0";
            }
        }
        catch (Exception ex)
        {
        }
    }

protected void SubmitListItem(object sender, EventArgs e)
        {
            if (Page.IsPostBack)
            {
                SPUser user = web.CurrentUser;
                string alias = user.Email.Substring(0, user.Email.IndexOf('@'));
                if (ListChoice.SelectedItem.Text == "comment")
                {
                    SPList TargetList = web.Lists.TryGetList("Offer Comments");
                    SPListItem item = TargetList.Items.Add();
                    item["Title"] = TitleBox.Text;
                    item["Body"] = BodyBox.Text;
                    item["OfferID"] = OfferID;
                    item["Alias"] = alias;
                    item.SystemUpdate();
                    TargetList.Update();
                }
                else
                {
                    SPList TargetList = web.Lists.TryGetList("Offer Best Practices");
                    SPListItem item = TargetList.Items.Add();
                    item["Title"] = TitleBox.Text;
                    item["Body"] = BodyBox.Text;
                    item["OfferID"] = OfferID;
                    item.SystemUpdate();
                    TargetList.Update();
                }
            }
        }

РЕДАКТИРОВАТЬ: я могу подтвердить, что это не проблема databind (). Элемент item.count, получаемый при обратной передаче, обрабатывается правильно, но все еще на 1 элемент меньше.

Ответы [ 2 ]

1 голос
/ 13 декабря 2011

Я предполагаю, что SubmitListItem - обработчик событий элемента управления на странице.
Если это так, то, как и в предыдущем вопросе, Page_Load запускается перед обработчиком событий любого элемента управления. Поэтому при обратной передаче ваш ретранслятор привязывается до того, как происходит добавление элемента, поэтому при этой загрузке вы не увидите новый элемент.
Чтобы предотвратить это, перепроверьте повторитель после добавления предмета.

1 голос
/ 13 декабря 2011

Я думаю, что вы должны делать это, только если нет обратной передачи страницы:

protected void Page_Load(object sender, EventArgs e)
    {
       if (!Page.IsPostBack)
       {
        OfferID = Context.Request.QueryString["ItemID"];
        LoadOffers();
       }
    }
...