0

我的内容页面允许我操作数据,因此它们的代码包含错误处理块。我想做的是在母版页的模式窗口中设置几个标签的文本值,以便向用户显示错误消息:

<!-- master page -->
<div runat="server" id="divModalBg" class="modalbg"> </div>
<div runat="server" id="divErrorModal" class="modal">
    <asp:Label runat="server" id="lblErrorTitle"></asp:Label>
    <asp:Label runat="server" id="lblErrorMessage"></asp:Label>
    <asp:Button runat="server" id="btnRetry" text="Retry" />
</div>

我不确定如何在我的内容页面中设置这些标签的值...

// Users.aspx.cs
protected void btnUpdate_Click(object sender, EventArgs e)
{
    try
    {
        // do some stuff
    }
    catch(Exception ex)
    {
        // lblErrorTitle = "Update User";
        // lblErrorMessage = String.Format("Error actioning request: [ {0} ]", ex.Message);
        // btnRetry just closes the modal (sets visible to false) so that
        // the user can try again
    }
}

那么如何访问母版页上的控件以便执行此操作?

我正在考虑母版页上的属性,将它们设置为 onPageLoad...

编辑
根据mason下面的回答,我已经这样做了......

// Default.master
// properties for error handling
public virtual Label ErrorTitle { get { return lblErrorAction; } }
public virtual Label ErrorMessage { get { return lblErrorMessage; } }
public virtual Panel ErrorBG { get { return pnlErrorBackground; } }
public virtual Panel ErrorModal { get { return pnlErrorModal; } }

这是我的指令:

<%@ MasterType VirtualPath="~/Default.master" %>

这是我的代码文件

// Users.aspx.cs
private void deleteUser(int userid)
{
    ImajUser u = new ImajUser(userid, true);
    try
    {
        u.Delete();

        lblerr.Text = "User was deleted successfully.";
        lblerr.ForeColor = System.Drawing.Color.Green;
    }
    catch (Exception ex)
    {
        Page.Master.ErrorTitle.Text = "Delete User";
        Page.Master.ErrorMessage.Text = String.Format("Error actioning request: [ {0} ]", ex.Message);
        Page.Master.ErrorBG.Visible = true;
        Page.Master.ErrorModal.Visible = true;

    }

现在,这些控件中的每一个都出现以下错误:

“System.Web.UI.MasterPage”不包含“ErrorTitle”的定义,并且找不到接受“System.Web.UI.MasterPage”类型的第一个参数的扩展方法“ErrorTitle”(您是否缺少 using 指令还是汇编参考?)

4

2 回答 2

2

尽管托尔的回答会奏效,但还有更好的方法。通过将其放入 ASPX 文件中来设置内容页面上的主类型。显然,将 TypeName 替换为母版页代码中的类名称。

<%@ MasterType TypeName="MyMasterClassName" %>

这使您的母版页可以从内容页进行强类型访问。然后,要访问 MasterPage 上的控件(默认为privateprotected,不确定是哪个),您需要使用属性将它们公开为public. 所以把它放在你的母版页代码后面......

public virtual Label LblErrorMessage { get {return lblErrorMessage;}}

然后从你后面的代码中,你可以像这样访问它......

Master.LblErrorMessage.Text="Hello, world!";
于 2014-05-09T12:37:54.673 回答
0

您可以使用这种结构访问母版页中的任何公共方法:

在 page.aspx 中:

if (Page.Master != null)
                     ((YourMasterPageType)Page.Master).SetError("your error txt");

在您的母版页中:

public void SetError(string errMsg)
        {
            ErrCtrl.Visible = true;
            ErrCtrl.Text(errMsg);
        }
于 2014-05-09T12:29:11.840 回答