0

我有一个包含 2 个用户控件的 aspx 页面

UC1:编辑页面 - 这有用于编辑或数据输入的字段。

UC2:通知页面 - 这有一个带有 jquery 功能的简单消息框

在我的 aspx 中,我有这个功能:

public void ShowMessage(string status, string message)
    {
        Notification1.Message = message; //this is my user control UC2
        Notification1.Status = status;
        Notification1.DataBind();
    }

现在,当我的 aspx 页面需要显示一条消息时,这可以正常工作,但是当我希望用户控件 1 显示类似(无效字段或错误数量)之类的消息时,它什么也不做。现在它被调用了,但 jquery 只是没有对它做出反应。

在 UC2 -notification 用户控件中,这就是我所拥有的:

<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.4.4.js"></script>
<script type="text/javascript">
function showMsg(classname) {
    $("#MsgBox").attr('class', classname);
    $("#MsgBox").show().delay(5000).fadeOut();
}
</script>
<div id="MsgBox" class="info"><asp:Label ID="lblMessage" runat="server" /></div>

代码隐藏

 public string Status{ get; set; }
    public string Message { get; set; }
    public override void DataBind()
    {
        if (Message != string.Empty)
        {

            lblMessage.Text = Message;
            Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showMsg('" + Status + "');", true);
        }

    }

这就是我将函数从用户控件调用到 aspx 页面的方式:

((myaspxpage)this.Page).ShowMessage("error", "This is my error message.");

任何帮助都感激不尽!如果需要更多详细信息,请告诉我.. 提前致谢。

**编辑:我尝试将 jquery 和消息框放在我的编辑页面中,看看它是否会以这种方式工作,但事实并非如此 所以看来 jquery 在用户控件中无法正常工作?

4

2 回答 2

0

将您的DataBind()方法代码移动到OnPreRender. 这应该有效。原因是您不知道页面周期的哪​​个步骤(初始化、加载、绑定...)中的哪个代码会更改Message属性。

就像您的情况一样,您似乎有一个按钮单击事件,您可以在其中设置Message属性。这为时已晚,因为您的Notification1控件已经是数据绑定的。

将其保留为最新阶段使其工作:

protected override void OnPreRender()
    {
        if (Message != string.Empty)
        {

            lblMessage.Text = Message;
            Page.ClientScript.RegisterStartupScript(this.GetType(), "alert", "showMsg('" + Status + "');", true);
        }

    }
于 2012-07-06T00:54:30.873 回答
0

我发现错误是我在 aspx 页面中调用函数的按钮位于更新面板内,我需要添加触发事件以使其工作。感谢大家的帮助,是更新面板导致错误: (

于 2012-07-06T17:17:24.203 回答