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

Thorの答えは機能しますが、もっと良い方法があります. これを 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 に答える