Хотите сделать видимость истинной со стороны клиента элемента управления, который стал невидимым со стороны сервера

#c# #javascript #asp.net #html #css

#c# #javascript #asp.net #HTML #css

Вопрос:

У меня есть текстовое поле на странице. Видимость которого установлена false со стороны сервера. Теперь я хочу сделать его видимым со стороны клиента с помощью java-script. (Любая обратная отправка или частичная обратная отправка не может быть реализована в этом случае.)

 <%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
    <head id="Head1" runat="server">
        <title>ControlVisibilityClientSide</title>
            <script type="text/javascript">
                function toggleVisibility(controlId)
                {
                    var control = document.getElementById(controlId);
                    if(control.style.visibility == "visible" || control.style.visibility == "")
                        control.style.visibility = "hidden";
                    else
                        control.style.visibility = "visible";
                }
            </script>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
                <input type="button" ID="btnShowHide" value="Show/Hide" onclick="toggleVisibility('TextBox1');" />
            </div>
        </form>
    </body>
</html>
  

Это работает нормально.

Но когда я использую

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        TextBox1.Visible = false;
    }
}
  

Приведенный выше код вообще не работает.

Может ли кто-нибудь, пожалуйста, помочь мне с этой проблемой или любое предложение будет оценено.

Ответ №1:

Если вы установите элемент управления visible=false , он не будет отображаться на стороне клиента, но есть хитрое решение, которое выполнит то же самое.

При загрузке вашей страницы, на которой вы настроены Visible=false , вы можете установить style значение display:none

 protected void Page_Load(object sender, EventArgs e)
{
   TextBox1.Attributes.Add("style", "display:none");
}
  

Это отобразит элемент управления на стороне клиента, но пользователь не сможет его увидеть, и тогда вы сможете отобразить элемент управления в функции Javascript для установки style Diplay:block , НАПРИМЕР…

 document.getElementById('<%=TextBox2.ClientID %>').style.display = 'block';
  

Комментарии:

1. Спасибо за ваш ответ, но та же проблема сохраняется. Не работает.

2. я ОБНОВИЛ СВОЙ ОТВЕТ. ВЫ ДОЛЖНЫ УСТАНОВИТЬ DISPLAY = BLOCK НА ВИДИМЫЙ ДЛЯ ВАШЕГО ЭЛЕМЕНТА УПРАВЛЕНИЯ.

3. @Muhammad Akhtar да, когда я использую control.style.display = ‘none’; или control.style.display = ‘block’; тогда это работает. Тем не менее, я не принял ваш ответ, потому что я хочу посмотреть, есть ли какое-либо решение для «TextBox1.Visible = false;» или нет. Большие усилия, большое спасибо.

4. Это то, что я предлагаю вам альтернативное решение для visible / invisible. Если вы установите свойство элемента управления visible = false, то элемент управления не отображается, тогда как вы можете видеть этот конкретный элемент управления.

5. Для «TextBox1.Visible =false» нет решения, потому что (согласно ответу VinayC, который вы, должно быть, видели, потому что вы поместили под ним комментарий) это останавливает HTML-разметку для элемента управления, отправляемого клиенту, поэтому, что касается браузера и любого клиентского JavaScript, элемент управления не существует. Ответ Мухаммеда дает вам способ включить HTML-разметку для элемента управления на страницу, но использовать CSS, чтобы скрыть / показать его. С помощью CSS вы можете использовать либо ‘display’, либо ‘visibility’ — для вашей цели, я подозреваю, что ‘display’ — лучший вариант.

Ответ №2:

Как только элемент управления помечен как невидимый на стороне сервера, для него не создается разметка (html). Таким образом, его нельзя сделать видимым в JS, потому что он (соответствующий html) не существует на стороне клиента.

Вместо того, чтобы делать невидимым на стороне сервера, вам нужно создать сценарий запуска, чтобы скрыть его на стороне клиента.

Комментарии:

1. Спасибо за вашу помощь. Есть ли какой-нибудь трюк для выполнения такого рода действий? Потому что требование только такое.

Ответ №3:

установите style["visibility"] = "hidden" на стороне сервера. Т.е. в c # btnSave.style["visibility"] = "hidden"; будет отображаться кнопка, и, следовательно, на стороне клиента этот элемент доступен. На стороне клиента измените стиль видимости на видимый.

 $('#btnSave).css("visibility", "visible");