2013-06-14 2 views
1

Я хотел бы знать, как сохранить состояние управления, которое было изменено в Javascript.
У меня есть два TextBox, один DropDownList и кнопка (все Runat = Server) в C# ASP.net 2010 Express.

Первый текстовый блок просто принимает любые данные, вводимые пользователем.
Второе состояние включения текстового поля будет изменяться в зависимости от выбранного значения DDL.
Если выбранное значение ddl равно «-», второе текстовое поле станет Enabled = False.
Если не «-», он станет Enabled = True. Это разрешение выполняется через Javascript.ASP.Net: Как сохранить состояние TextBox после обратной передачи


На моей странице Загрузить мероприятие у меня есть код ниже.

if (!IsPostBack) 
{ 
    txtKey2.Text = ""; 
    txtKey2.BackColor = System.Drawing.ColorTranslator.FromHtml("#CCCCCC"); 
    txtKey2.Enabled = false; 
} 


И в моей странице ASPX, у меня есть некоторые JavaScript, который очистит данные TextBox и отключить текстовое поле.

Это вторая текстовая область.

<asp:TextBox ID="txtKey2" runat="server" Width="425px" EnableViewState="False"></asp:TextBox> 


А вот для DDL.

<asp:DropDownList ID="selKey1" runat="server" onchange="EnableSelkey(this.value,1)"> 
    <asp:ListItem Value="0">-</asp:ListItem> 
    <asp:ListItem Value="1">AND</asp:ListItem> 
    <asp:ListItem Value="2">OR</asp:ListItem> 
</asp:DropDownList> 

Вот код для моего Javascript. (У меня есть план для реализации другого текстового поля и ddl, поэтому в моем коде у меня есть Else if condition).

function EnableSelkey(val, strID) { 
    var txtBox; 
    if (strID == "1") 
     txtBox = document.getElementById('<%= txtKey2.ClientID %>'); 
    else if (strID == "2") 
     txtBox = document.getElementById('<%= txtKey3.ClientID %>'); 
    else 
     txtBox = document.getElementById('<%= txtKey4.ClientID %>'); 

    if (val != 0) { 
     txtBox.disabled = false; 
     txtBox.style.backgroundColor = "White"; 
     txtBox.value = ""; 
     txtBox.select(); 
    } 
    else { 
     txtBox.disabled = true; 
     txtBox.style.backgroundColor = "#CCCCCC"; 
     txtBox.value = ""; 
    } 
} 

У меня нет ничего в событии нажатия кнопки.

Используя код выше, когда я запускаю проект, страница загружается Ok. Второе состояние с включенным текстовым полем установлено в False (через событие Page_Load). Пока хорошо.

Затем из моего браузера я выбираю значение ddl для другого вместо «-», текстовое поле становится возможным из-за javascript. Хорошо.

Введите значение и нажмите кнопку. Страница PostBack происходит здесь. Текстовое поле все еще включено (из-за EnableViewState = False для моего текстового поля).

Я выбираю значение ddl для «-», второе текстовое поле отключено.
Нажмите кнопку, страница postback произойдет, но на этот раз текстовое поле все еще включено. < < Это проблема, которую я пытаюсь решить. Я изменяю EnableViewState, ViewStateMode в разных значениях, но все тот же.

Есть ли решение для этого?

Вот мой URL-адрес тестового изображения. State 1, State 2, State 3

Извините за длинный пост.

ответ

2

Я пытался и не нашел решения рядом с дополнительным элементом управления HiddenField.

Я обновляю значение скрытого поля, когда обновляю статус своего текстового поля в Javascript. И на моем этапе загрузки страницы я проверил все значения скрытого поля и на основе значений скрытого поля, я отключу/включу свои текстовые поля, которые для меня не являются хорошими решениями.

Предположим, у меня есть 10 или 15 текстовых полей в моей форме, мне нужно иметь 10 или 15 скрытых полей, чтобы поддерживать результат действия на стороне клиента.

В настоящее время это единственное решение для меня.

Я не уверен, что это может рассматриваться как «Ответ», поэтому я еще не закрыл этот вопрос.

0
<asp:DropDownList ID="selKey1" runat="server" onchange="EnableSelkey(this.value,1)"> 
    <asp:ListItem Value="0">-</asp:ListItem> 
    <asp:ListItem Value="1">AND</asp:ListItem> 
    <asp:ListItem Value="2">OR</asp:ListItem> 
</asp:DropDownList> 

function EnableSelkey(val, strID) { 
    var txtBox;   
    if (strID == "1") 
     txtBox = document.getElementById('<%= txtKey2.ClientID %>'); 
    else if (strID == "2") 
     txtBox = document.getElementById('<%= txtKey3.ClientID %>'); 
    else 
     txtBox = document.getElementById('<%= txtKey4.ClientID %>'); 

    if (val != 0) { 
     txtBox.disabled = false; 
     txtBox.style.backgroundColor = "White"; 
     txtBox.value = ""; 
     txtBox.select(); 
    } 
    else { 
     txtBox.disabled = true; 
     txtBox.style.backgroundColor = "#CCCCCC"; 
     txtBox.value = ""; 
    } 
} 

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

if (!IsPostBack) 
{ 
    txtKey2.Text = ""; 
    txtKey2.BackColor = System.Drawing.ColorTranslator.FromHtml("#CCCCCC"); 
    txtKey2.Enabled = false; 
} 

ScriptManager.RegisterClientScriptBlock(this, typeof(System.Web.UI.Page), "MyJSFunction", "EnableSelkey("+selKey1.SelectedValue+",1);", true); 

Это может помочь вам, дайте мне знать для дальнейшей помощи.

+0

Hi Mayur, Спасибо за ваше предложение, я попробовал ваше предложение, но на этот раз он даст мне ошибку до загрузки моей страницы. «Ошибка выполнения Microsoft JScript:« null »или не объект», и эта ошибка была «else txtBox.disabled = true;» линия. Извините за длинный перерыв и ответ за задержку. – scsfdev

0

Я нашел решение, которое сработало, чтобы поместить код, который я ввел в раздел! IsPostBack для включения и отключения текстовых полей также непосредственно в событии загрузки страницы.

Смежные вопросы