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.) 动态添加控件,如下所示:

我的页面.aspx

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

我的页面.aspx.cs

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

    pnlErrorPlaceHolder.Controls.Add(lbl);
}

或者

3.)您可以利用一个名为 Visible 的属性,它有助于决定控件是否将成为响应的一部分。看起来像这样:

我的页面.aspx

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

我的页面.aspx.cs

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

如果您只是想将文本写入 div,请为 div 赋予runat="server"属性:

ASPX

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

C#

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

我同意检查 ASP.NET MVC、Razor 等框架的教程的建议。如果您尝试执行手动验证,那么您已经做错了。有很多很多很多方法可以用很少到零的代码来做到这一点。如果您正在设计 Web 窗体应用程序,至少可以使用 ASP.NET 字段验证器。

于 2012-04-03T19:04:40.027 回答
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

我很确定您可以在 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 回答