1

asp.net で動的にページの読み込み時に特定の html コードをページに追加するにはどうすればよいですか?

例:パスワードの検証が必要です。パスワードが間違っている場合..ページの読み込み時に、「エラー」という名前の div が bodyWrapper という div のすぐ上に表示される

これを行う私の現在の方法は、aspxファイルにインラインで書き込むことです..しかし、これはインラインとコードビハインドを混在させる適切な方法ではないことを知っています.

<div id="content">
        <% 
            Session["loginError"] = "loginError";

            try
            {
                if (Session["loginError"].ToString() == "lockout")
                {
        %>
        <div class="errorMessage">
            Your Account has been locked out. Please wait
            <% Response.Write(Session.Timeout); %>
            minutes and try again.
            <br />
        </div>
        <%

            }
                else if (Session["loginError"].ToString() == "loginError")
                {
                     %>
                     <div class="errorMessage">The user ID or password you entered does not match our records. Please try again. <br /> 
        You may also securely recover your <a href="#">User ID</a> or reset your <a href="#">Password</a> online. 
    </div>

                     <%

                }

    }
    catch
    {
        //cssClassName = "loginTextInput";
        //Response.Redirect("login.aspx");
    }    


        %>
4

5 に答える 5

1

基本的にいくつかのオプションがあります。

1.)あなたがすでに行っているようにロジックとマークアップを混ぜる(私の意見では良くない)

2.)次のように、コントロールを動的に追加します。

MyPage.aspx

<asp:Panel id="pnlErrorPlaceHolder" runat="server">    
</asp:Panel>

MyPage.aspx.cs

if (i_found_some_error)
{
    Label lbl = new Label();
    lbl.Text = "An error occurred";

    pnlErrorPlaceHolder.Controls.Add(lbl);
}

また

3.)Visibleと呼ばれる属性を利用できます。これは、コントロールが応答の一部になるかどうかを決定するのに役立ちます。これは次のようになります。

MyPage.aspx

<asp:Panel id="pnlErrorBox" Visible="false" runat="server">
      Some info for the user if there was an error.
</asp:Panel>

MyPage.aspx.cs

if (there_was_an_error)
{
    pnlErrorBox.Visible = true;
    // and maybe set some additional info
}
于 2012-04-03T12:34:32.467 に答える
1

If you simply want to write text to a div, give the div the runat="server" attribute:

ASPX

<div id="error" runat="server" class="errorMessage"></div>

C#

if(IsPostBack && YouHaveAnError) {
    error.InnerHtml = "[YourErrorMessage]";
}
于 2012-04-03T12:30:45.987 に答える
0

これは、Page_Load イベント ハンドラーのコード ビハインドで実行できると確信しています。いくつかの方法がありますが、次の方法を試してください。

マークアップで、Panel コントロールを追加し、最初にその可視性を false に設定します。

<asp:Panel ID="ErrorPanel" runat="server" Visible="False"></asp:Panel>

次に、ページの分離コードの Page_Load で、ログイン ロジックを実行し、このパネルに書き込みます。例えば:

protected void Page_Load(object sender, EventArgs e)
{
    try
    {
         if (Session["loginError"].ToString() == "lockout")
         {
               LiteralControl errorControl = 
                  new LiteralControl(String.Format("Your account has been locked out. Please wait {0} minutes and try again.", Session.Timeout));
               ErrorPanel.Controls.Add(errorControl);
               ErrorPanel.Visible = true;
         }
         // add more login logic for login error
    }
    catch(Exception) //you may want to capture more specific Exceptions
    {
         //handle the exception(s)
    }
}
于 2012-04-03T12:51:08.847 に答える
0

の代わりに asp:Panel を用意し、コード ビハインドで可視性を切り替えます。

    <asp:Panel ID="pnlAccountLocked" Visible="false" runat="server" CSSClass="errorMessage">
        Your Account has been locked out. Please wait
        <% Response.Write(Session.Timeout); %>
        minutes and try again.
        <br />
    </div>

およびページ読み込みコードの背後にあるコードで:

      private void Page_Load(object sender, System.EventArgs e)
    {
        pnlAccountLocked.Visible = 
                        !(Session["loginError"].ToString() == "lockout");

    }
于 2012-04-03T12:31:58.153 に答える
0

ASP.NET MVC、Razor などのフレームワークのチュートリアルをチェックアウトするという提案に同意します。手動で検証を実行しようとしている場合は、すでに何か間違ったことをしています。ほとんどまたはゼロのコードでこれを行うには、非常に多くの方法があります。Web フォーム アプリを設計している場合は、少なくとも ASP.NET フィールド バリデーターを使用できます。

于 2012-04-03T19:04:40.027 に答える