下面提到的代码是我在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)更新sharepoint列表项,为此我创建了方法UpdateList。每当单击任何超链接时,我需要调用UpdateList方法。我试图使用链接按钮,但正如预期的那样,他们没有工作(评论)与htmltextwriter,所以我添加了两个简单的锚标记。但是现在如何触发click事件呢?
我读了system.web.services,但无法使其工作。我现在能想到的唯一选择是创建一个单独的web服务,其中包含方法UpdateList
,并对其进行ajax调用。
任何人都可以建议一些其他的东西,或者是有可能使用ASP。网络颜色(如LinkButton)与Htmltextwriter
。
Ok首先使用OnLoad事件而不是Render。
你需要做的是将LinkButton添加到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替换为控件的load事件,然后将this.Form.Controls替换为this.controls。你也可以在 来为链接之间提供一个空格,而不是换行符。