如何将一个函数从页面代码传递给用户控件



我正在研究一个应用程序,该应用程序是通过将代码复制和粘贴到单个页面中而构建的,作为用户控件更有意义。我想。

基本上它允许页面加载/保存/重置为默认设置,所以每个页面都有自己的代码定义自己的函数来处理这些事件。

我试图建立一个用户控件,允许页面将处理程序传递给用户控件,但还没有弄清楚如何成功地做到这一点。我只是想传递已经被使用的函数。

新用户控制

public partial class uc_SaveCriteriaControl : System.Web.UI.UserControl
{
public Action SelectedCriteriaChanged { get; set; }
public Action ResetFunction { get; set; }
public Action SaveFunction { get; set; }

protected void SelectionUpdated(object sender, EventArgs e)
{
SelectedCriteriaChanged();
}
protected void Reset(object sender, EventArgs e)
{
ResetFunction();
}
protected void Save(object sender, EventArgs e)
{
SaveFunction();
}
protected void Page_Load(object sender, EventArgs e)
{
}
}

尝试使用

<uc3:CriteriaControl runat="server" SaveFunction="imgbtnSaveParam1_Click" ResetFunction="imgbtnResetParams_Click" SelectedCriteriaChanged="MyParams_SelectedIndexChanged" />

这是现有按钮的样子

<asp:Button CssClass="btn h-100" ID="imgbtnSaveParams" runat="server" OnClick="imgbtnSaveParam1_Click" Text="Save Criteria" Width="100%" />

它不喜欢传递函数名,这是有意义的,但我不确定您将如何做到这一点。

不能创建System类型的对象。Action'从它的字符串表示为'SaveFunction'的'imgbtnSaveParam1_Click'财产。

似乎我可能需要使用这样的事件处理程序。

public partial class uc_SaveCriteriaControl : System.Web.UI.UserControl
{
public delegate void ResetHandler(object sender, EventArgs data);
public event ResetHandler ResetButtonClicked;
public delegate void SaveHandler(object sender, EventArgs data);
public event SaveHandler SaveButtonClicked;
public delegate void SelectionUpdatedHandler(object sender, EventArgs data);
public event SelectionUpdatedHandler SelectionIsUpdated;
protected void SelectionUpdated(object sender, EventArgs e)
{
if (SelectionIsUpdated != null)
SelectionIsUpdated(this, e);
}
protected void Reset(object sender, EventArgs e)
{
if (ResetButtonClicked != null)
ResetButtonClicked(this, e);
}
protected void Save(object sender, EventArgs e)
{
if (SaveButtonClicked != null)
SaveButtonClicked(this, e);
}
protected void Page_Load(object sender, EventArgs e)
{
}

在父

criteriaControl.SaveButtonClicked += imgbtnSaveParam1_Click;
criteriaControl.ResetButtonClicked += imgbtnResetParams_Click;
criteriaControl.SelectionIsUpdated += MyParams_SelectedIndexChanged;

最新更新