Программно создать asp: кнопку и прикрепить событие в SharePoint - PullRequest
1 голос
/ 19 октября 2010

Я пытаюсь создать кнопки ASP.NET программно на панели обновлений в моем экземпляре SharePoint, но из-за жизненного цикла страницы я не могу прикрепить события кнопок на стороне сервера.

Вот код:

TableCell tcellbutton = new TableCell();
b.Click += new EventHandler(b_Click);
b.CausesValidation = true;
tcellbutton.Controls.Add(b);
tr.Cells.Add(tcellbutton);
table.Rows.Add(tr);
panel1.Controls.Add(table);

void b_Click(object sender, EventArgs e)
{
    string studentnumber = (sender as Button).ID.ToString().Substring(3, (sender as Button).ID.ToString().Length - 3);
    TextBox t = panel1.FindControl("txt" + studentNumber) as TextBox;
}

Есть ли другой способ создания и присоединения кнопок в Sharepoint?

Ответы [ 3 ]

2 голосов
/ 20 октября 2010

Хорошо, вот как я решил это, спасибо за все ответы, я искал способ прикрепить событие к кнопке, которая создается динамически во время выполнения (после инициализации). Надеюсь, что это работает и для других.

<script type="text/javascript">
    function ButtonClick(buttonId) {
        alert("Button " + buttonId + " clicked from javascript");
    }
</script> 

protected void Button_Click(object sender, EventArgs e)
{
    ClientScript.RegisterClientScriptBlock(this.GetType(), ((Button)sender).ID, "<script>alert('Button_Click');</script>");
    Response.Write(DateTime.Now.ToString() + ": " + ((Button)sender).ID + " was clicked");
}    

private Button GetButton(string id, string name)
{
    Button b = new Button();
    b.Text = name;
    b.ID = id;
    b.Click += new EventHandler(Button_Click);
    b.OnClientClick = "ButtonClick('" + b.ClientID + "')";
    return b;
}
1 голос
/ 31 января 2012

Вы создаете динамические элементы управления.Ваш код должен выполняться в каждом PageLoad событии.Удалите IsPostBack для той части кода, где вы создаете кнопки, это мой совет.

Если вы этого не сделаете, вы создадите элементы управления, но каждый раз, когда происходит событие PageLoad, вашконтроль будет удален, и приложение не будет следить за вашими событиями.Другими словами, вы всегда должны заново создавать элементы управления.

1 голос
/ 19 октября 2010

Вы должны добавить свой код в PreInit событие, код ниже работает хорошо:

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);
    Button bb = new Button();
    bb.Click += new EventHandler(bb_Click);
    bb.CausesValidation = true;
    bb.ID = "button1";
    Panel1.Controls.Add(bb);
}

private void bb_Click(object sender, EventArgs e)
{
    Response.Write("any thing here");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...