如何正确将输入参数传递给C#中的事件处理程序方法?

时间:2019-02-13 09:45:51

标签: c# asp.net .net

我在 C# .NET 上还很陌生,我遇到以下问题。

在我的代码中,我有这样的东西:

Table table = new Table();

lstLabelType.SelectedIndexChanged += new System.EventHandler(SelectDocumentTypeChanged);

将事件处理程序附加到视图中的下拉元素。

因此,当用户将选定的值更改为此下拉菜单时,将执行 SelectDocumentTypeChanged()方法,该方法是

private void SelectDocumentTypeChanged(object sender, EventArgs e)
{
    Debug.WriteLine("SelectDocumentTypeChanged() STARTED");

    SPWeb contextWeb = SPContext.Current.Web;

    DropDownList listaTipiDocumenti = (DropDownList)sender;
    tipoDocumentoSelezionato = listaTipiDocumenti.SelectedValue;
    this.renderizzaEtichetteFacoltative(tipoDocumentoSelezionato, table);

    string url = contextWeb.Url;
    string link = url + "/ARXEIA WEBPART/Stampa Etichetta.aspx?IsDlg=1&postazione=" + macchina + "&tipoDoc=" + tipoDocumentoSelezionato;
    SPUtility.Redirect(link, SPRedirectFlags.Default, Context);


}

现在我有问题。我必须将在代码中创建的 Table table 对象传递给此事件处理程序方法,因为必须使用此方法。

如何正确实现此行为?当用户更改我的下拉菜单中的值时,如何自动调用该 Table table 对象到 SelectDocumentTypeChanged()方法?

1 个答案:

答案 0 :(得分:6)

尝试这样编写代码:

Table table = new Table();

lstLabelType.SelectedIndexChanged += (sender, e) =>
{
    Debug.WriteLine("SelectDocumentTypeChanged() STARTED");

    SPWeb contextWeb = SPContext.Current.Web;

    DropDownList listaTipiDocumenti = (DropDownList)sender;
    tipoDocumentoSelezionato = listaTipiDocumenti.SelectedValue;
    this.renderizzaEtichetteFacoltative(tipoDocumentoSelezionato, table);

    string url = contextWeb.Url;
    string link = url + "/ARXEIA WEBPART/Stampa Etichetta.aspx?IsDlg=1&postazione=" + macchina + "&tipoDoc=" + tipoDocumentoSelezionato;
    SPUtility.Redirect(link, SPRedirectFlags.Default, Context);
};

现在,您可以直接在事件处理程序中直接使用table


您现在甚至可以忽略sender并执行以下操作:

lstLabelType.SelectedIndexChanged += (s, e) =>
{
    Debug.WriteLine("SelectDocumentTypeChanged() STARTED");

    SPWeb contextWeb = SPContext.Current.Web;

    tipoDocumentoSelezionato = lstLabelType.SelectedValue;
    this.renderizzaEtichetteFacoltative(tipoDocumentoSelezionato, table);

    string url = contextWeb.Url;
    string link = url + "/ARXEIA WEBPART/Stampa Etichetta.aspx?IsDlg=1&postazione=" + macchina + "&tipoDoc=" + tipoDocumentoSelezionato;
    SPUtility.Redirect(link, SPRedirectFlags.Default, Context);
};

如果要保留其他方法,可以执行以下操作:

Table table = new Table();

lstLabelType.SelectedIndexChanged += (o, e) => SelectDocumentTypeChanged(lstLabelType, table);


private void SelectDocumentTypeChanged(DropDownList lstLabelType, Table table)
{
    Debug.WriteLine("SelectDocumentTypeChanged() STARTED");

    SPWeb contextWeb = SPContext.Current.Web;

    tipoDocumentoSelezionato = lstLabelType.SelectedValue;
    this.renderizzaEtichetteFacoltative(tipoDocumentoSelezionato, table);

    string url = contextWeb.Url;
    string link = url + "/ARXEIA WEBPART/Stampa Etichetta.aspx?IsDlg=1&postazione=" + macchina + "&tipoDoc=" + tipoDocumentoSelezionato;
    SPUtility.Redirect(link, SPRedirectFlags.Default, Context);
}