如果您遇到的问题是您的按钮位于更新面板之外,则可以执行以下操作。页codebhind:
protected void Page_Load(object sender, EventArgs e)
{
string hideScript = string.Format("function updateButtonVisibility(visibility) {{ var button = $('#{0}'); if (visibility) {{ button.show(); }} else {{ button.hide(); }} }}", this.button1.ClientID);
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "updateButtonVisibility", hideScript, true);
}
而用户控制命令处理程序:
bool shouldButtonBeVisible = false; //update this appropriately in your logic
ScriptManager.RegisterStartupScript(this, this.GetType(), "upUpdateButtonVisibility", "updateButtonVisibility(" + shouldButtonBeVisible ? "true" : "false" + ");", true);
请注意,这将创建您的UC和页面之间的紧密相关性。它要求任何使用此控件的页面都注册了此脚本。有办法解决这个问题(比如设置一个函数脚本回调来调用,检测这个javascript函数是否存在等),但这至少应该让你感动。
如果您更新面板之后特定页面上完成的东西,你可以键关机,它可能会更好注册一个结束请求处理程序
$(function() { Sys.WebForms.PageRequestManager.getInstance().add_endRequest(updatePanelEndRequestHandler); });
function updatePanelEndRequestHandler() {
var shouldBeVisible = $('.MyClassThatSaysIShouldntAllowMoreButtons').length > 0; //do some checking on the grid
updateButtonVisibility(shouldBeVisible);
}
你的问题是有点混乱。你确定你的意思是'IsButton1Visible'属性是usercontrol的一部分吗? – freefaller 2012-07-24 13:10:14
在您的UserControl中引发您的页面可以处理的自定义事件。然后,您可以根据事件参数或UserControl属性切换可见性。 – 2012-07-24 13:10:58
更好的方法可能是在控件上添加一个UpdateParentButtonVisibility效果的事件,并创建一个事件arg来设置所需的可见性。您的父母页面然后可以订阅该事件并进行适当的处理。 – 2012-07-24 13:11:26