1

下面提到的代码是我在 sharepoint 2010 上的 webpart 的一部分。

public class class1 : System.Web.UI.WebControls.WebParts.WebPart
    { 
protected override void Render(HtmlTextWriter writer)
        {
            string s1 = "first";
            string s2 = "second";
            string s3 = "third";

            slist.Add("first");
            slist.Add("second");
            LinkButton b;

            writer.Write("<div id='tblSegment' ><table >");
            foreach (string s in slist)
            {
                //b = new LinkButton();
                //b.Text = s;
                //b.Click += (sender1, e1) => { b_Click(sender, e, s1, s2, s3); };
                writer.Write("<tr><td >");
                writer.Write("<a href=''  >");
                writer.Write(s + "</a>");
                writer.Write("</td></tr>");
            }
            writer.Write("</table></div>");
        }
        void b_Click(object sender, EventArgs e, string s1, string s2, string s3)
        {
            UpdateList(s1,s2,s3);
        }
    public void UpdateList(string ID, string column, string value)
        {
            using (SPSite oSPsite = new SPSite("http://server"))
            {
                using (SPWeb oSPWeb = oSPsite.OpenWeb())
                {
                    oSPWeb.AllowUnsafeUpdates = true;
                    // Fetch the List
                    SPList list = oSPWeb.Lists["UserProfiles"];
                    //create Query
                    SPQuery query = new SPQuery();
                    query.Query = string.Concat(
                                   "<Where><Eq>",
                                      "<FieldRef Name='ID'/>",
                                      "<Value Type='String'>" + ID + "</Value>",
                                   "</Eq></Where>");
                    //get List Item
                    SPListItemCollection listItems = list.GetItems(query);
                    SPListItem item = listItems[0];

                    //update List Item
                    item[column] = value;
                    item.Update();
                    oSPWeb.AllowUnsafeUpdates = false;
                }
            }
        }
}

我有点卡在这里,我需要做的是根据一些值(s1,s2,s3)更新共享点列表项,为此我创建了方法 UpdateList。每当单击任何超链接时,我都需要调用 UpdateList 方法。我尝试使用链接按钮,但正如预期的那样,它们无法与 htmltextwriter 一起使用(已评论),因此我添加了两个简单的锚标记。但是现在如何触发点击事件。

我阅读了有关 system.web.services 的信息,但无法使其正常工作。我现在能想到的唯一选择是创建一个单独的 Web 服务,其中包含UpdateList某种方法,并对其进行 ajax 调用。

任何人都可以提出其他建议吗,或者是否可以将 ASP.Net colrols(例如 LinkBut​​ton)与Htmltextwriter.

4

1 回答 1

2

好的,首先使用 OnLoad 事件而不是 Render。

您需要做的是将 LinkBut​​ton 添加到 Controls 属性。

您会发现很难让您的超链接直接调用 updatelist 而无需手动编码回发事件。

编辑这对我有用:

List<string> slist = new List<string>();
        protected void Page_Load(object sender, EventArgs e)
        {
            string s1 = "first";
            string s2 = "second";
            string s3 = "third";

            slist.Add("first");
            slist.Add("second");
            LinkButton b;


            foreach (string s in slist)
            {
                b = new LinkButton();
                b.Text = s;
                b.Click += (sender1, e1) => { b_Click(sender, e, s1, s2, s3); };

                this.Form.Controls.Add(b);
                this.Form.Controls.Add(new LiteralControl("<br/>"));
            }
        }

        void b_Click(object sender, EventArgs e, string s1, string s2, string s3)
        {
            UpdateList(s1, s2, s3);
        }

        public void UpdateList(string ID, string column, string value)
        {
            // ... enter code here

        }
    }

将 Page_Load 替换为您的控件的加载事件,您需要将 this.Form.Controls 替换为 this.controls。您也可以使用文字控件来代替在链接之间留出空格而不是换行符。

于 2013-01-21T16:54:01.040 回答