沙箱解决方案中的差列表项提交逻辑

时间:2011-12-12 17:42:39

标签: c# javascript sharepoint sandbox

我有一个网络部分,用于管理与正在进行的促销相关的评论。 Web部件托管在Sandbox解决方案中,因为所有类型的服务器访问都受到限制(// 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();
                }
            }
        }

编辑:我可以确认这不是数据绑定()问题。在回发时拉出的item.count正在正确呈现,但仍然只有1个项目。

2 个答案:

答案 0 :(得分:1)

我认为只有在没有页面回发的情况下才应该这样做:

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

答案 1 :(得分:1)

我假设SubmitListItem是页面上控件的事件处理程序 如果是那样,那么在上一个问题中,Page_Load就会在任何控件的事件处理程序之前触发。 因此,在回发后,您的转发器会在添加项目之前受到限制,因此在该加载时您无法看到新项目。
为防止在添加项目后重新绑定转发器。