1

以下のコードは、sharepoint 2010 の私の Web パーツの一部です。

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;
                }
            }
        }
}

私はここで立ち往生しています。私がする必要があるのは、メソッド UpdateList を作成したいくつかの値 (s1、s2、s3) に基づいて SharePoint リスト項目を更新することです。ハイパーリンクがクリックされるたびに UpdateList メソッドを呼び出す必要があります。リンクボタンを使ってみたのですが、htmltextwriter では期待通りに動かなかった(コメントされた)ので、単純なアンカータグを 2 つ追加しました。しかし、今クリックイベントを発生させる方法。

system.web.services について読みましたが、機能させることができません。私が今考えることができる唯一のオプションは、メソッドを使用して別の Web サービスを作成し、それにUpdateListajax 呼び出しを行うことです。

体は何か他のことを提案できますか、それともASP.Netカラー(LinkBut​​tonなど)をHtmltextwriter.

4

1 に答える 1

2

まず、Render ではなく OnLoad イベントを使用します。

必要なことは、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 に置き換える必要があります。改行ではなくリンク間にスペースを入れる代わりに、リテラル コントロールに and を挿入することもできます。

于 2013-01-21T16:54:01.040 に答える