我的内容页面允许我操作数据,因此,他们的代码包含错误处理块。我想要做的是在母版页的模态窗口中设置几个标签的文本值,以便向用户显示错误消息:
<!-- 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
}
}
那么如何访问母版页上的控件以便我可以这样做呢?
我正在考虑母版页上的属性,将它们设置为PageLoad ...
修改
根据{{1}}下面的答案,我已经完成了这个......
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" %>
现在,每个控件都会出现以下错误:
&#39; System.Web.UI.MasterPage&#39;不包含&#39; ErrorTitle&#39;的定义没有扩展方法&#39; ErrorTitle&#39;接受类型&#39; System.Web.UI.MasterPage&#39;的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)
答案 0 :(得分:2)
虽然托尔的答案会奏效,但还有更好的方法。通过将其放在ASPX文件中,在内容页面上设置主类型。显然,将TypeName替换为母版页后面代码中的类名。
<%@ MasterType TypeName="MyMasterClassName" %>
这使您可以从内容页面访问强类型的母版页。然后,要访问MasterPage上的控件(默认为private
或protected
,不确定哪个),您需要使用属性将它们公开为public
。所以把它放在你的母版页代码后面......
public virtual Label LblErrorMessage { get {return lblErrorMessage;}}
然后从您的代码后面,您可以像这样访问它......
Master.LblErrorMessage.Text="Hello, world!";
答案 1 :(得分: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);
}