Как добавить HTML-код динамически при загрузке страницы - PullRequest
1 голос
/ 03 апреля 2012

Как мне добавить определенный HTML-код на страницу на странице динамически загружать в asp.net?

Например: мне нужно подтвердить пароль.если пароль неправильный .. при загрузке страницы должен быть div с именем error, который появляется сверху в верхней части div с именем bodyWrapper

. Мой текущий способ сделать это - записать его в файл 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");
    }    


        %>

Ответы [ 5 ]

1 голос
/ 03 апреля 2012

У вас есть пара вариантов ..

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);
}

OR

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
}
1 голос
/ 03 апреля 2012

Если вы просто хотите записать текст в div, присвойте атрибуту runat="server":

ASPX

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

C #

if(IsPostBack && YouHaveAnError) {
    error.InnerHtml = "[YourErrorMessage]";
}
0 голосов
/ 03 апреля 2012

Я согласен с предложением просмотреть учебники для таких платформ, как ASP.NET MVC, Razor и т. Д. Если вы пытаетесь выполнить ручную проверку, значит, вы уже что-то делаете не так.Есть много, много, много способов сделать это с практически нулевым кодом.По крайней мере, вы можете использовать полевые валидаторы ASP.NET, если разрабатываете приложение для веб-форм.

0 голосов
/ 03 апреля 2012

Я уверен, что вы можете сделать это в коде вашего обработчика событий 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)
    }
}
0 голосов
/ 03 апреля 2012

Вместо того, чтобы иметь, у вас должна быть 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");

    }
...