我有一個Web部件用於管理與正在進行的促銷相關的評論。 Web部件託管在沙盒解決方案中,因爲所有類型的服務器訪問都受到限制(//共享點)沙盒解決方案中的差列表項提交邏輯
我的代碼有兩個主要問題。
1:提交回發後不出現,讓用戶認爲他們的意見的項目沒有保存,
2:頁面刷新後回傳數據重燒製,如果用戶刷新希望能看到他們的評論的意思,它是重新提交併保存。
我在這裏做錯了什麼?
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');\"" + "> </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個項目。
但該頁面重新加載回發。 Page_Load在SubmitListItem之後再次觸發。 – Wesley
請在方法上附加一個調試器,它對您來說很清楚。 – justforkix09
以下是方法/事件觸發的順序:在第一次加載時 - Init -Page_Load - PreRender - 渲染結束。當用戶點擊一個觸發後控制的控件時,序列是 - Init -Page_Load - 觸發回發的控件的事件處理程序 - PreRender - Render。因此,Page_Load(或者在webpart的情況下爲CreateChildControls)在事件處理器之前被回發。即使在回發期間,您也會看到http是無狀態協議,但在調用事件處理程序方法之前,必須在頁面加載中重新創建頁面控件。 – justforkix09