2009-11-03 3 views
-1

У меня есть модальное всплывающее окно с формальным видом с режимом редактирования по умолчанию. Элементы управления внутри формы привязаны к данным. У меня есть JavaScript, который показывает текстовое поле и метку, только если в раскрывающемся списке выбрано определенное значение. Я тоже хочу сделать это при загрузке.Настройка отображения в .NET-коде

<tr> 
    <td align="left"> 
     <asp:DropDownList 
      ID="ddl5" 
      AutoPostBack ="false" 
      onchange = showifother('12',this.value);" 
      SelectedValue='<%# Eval("event_type") %>' 
      runat="server" 
      DataSourceID="SqlDataSource5" 
      AppendDataBoundItems ="true" 
      DataTextField="Description" 
      DataValueField="ID"> 

      <asp:ListItem 
       Selected="True" 
       style="color:gray" 
       Value="" >Causes of Damage</asp:ListItem> 
     </asp:DropDownList> 


<tr id="treditpropdamage" style="display:none"> 
    <td align="left"> 
     <asp:TextBox 
      ID="txt2" 
      runat="server" 
      TextMode ="MultiLine" 
      ondatabinding="TextBox2_DataBinding" 
      ValidationGroup ="Editprop" 
      Text = '<%# Bind("bounddata") %>'></asp:TextBox> 
    </td> 
</tr> 

function showifother(num, value) 
{ 
    var treditpropdamage = document.getElementById('treditpropdamage'); 
    if (num == '12') 
    { 
     if (value == '4') 
     { 
      treditpropdamage.style.display = ''; 
     } 
     else 
     { 
      treditpropdamage.style.display = 'none'; 
     } 
    } 
} 

Как я могу установить тр тег виден, если 4 является значением связанного значения для меню списка в C#? Добавление RUNAT = «сервер» это не вариант, потому что я хочу, чтобы доступ к элементам управления в JavaScript с помощью document.getElementById

+0

было бы возможно: сначала взглянуть на выбранное значение ListBox, а затем сделать яваскрипта вызов из кода позади, когда страница загружается? :) Просто мысль .. – bomortensen

+0

Я пробовал это, но безрезультатно, потому что у меня нет события onload, чтобы поместить его. Тег тела не работал. – Eric

ответ

0

Несколько вариантов:

  • Добавить стиль (дисплей: нет) на стороне сервера (это означает, что у вас есть дубликаты логики в C# и Javascript)
  • Проверьте значение вашего выпадающего меню при загрузке формы (положить что-то вроде: showifother('12',document.getElementById('ddl5').value in your javascript может помочь)

Я действительно рекомендую вам скачать и узнать использовать рамку работайте, например, jQuery, dojo или Prototype .js - они ускорят вашу разработку и предоставят вам множество инструментов, облегчающих вашу жизнь.

+0

Первый не будет работать, потому что мне нужно иметь доступ к тэг-тегу, чтобы сделать это. И я не думаю, что второй вариант будет работать либо потому, что я должен был бы включить это в функцию onload в теге тела или каким-либо другим способом. Я пробовал это в теге body, но он должен путать тег основной страницы главной страницы с этим. – Eric

0

Если вы используете MasterPage Я думаю, что это будет делать:

1) установить тело тега вашего мастер-страницы или страницы RUNAT = «сервер» и дать ему: ID = «MainBody»

2) Ссылка на файл яваскрипта, как вы обычно делаете: < -script SRC = типа "yourJavascriptFile.js" = "текст/JavaScript">

3) Теперь в коде-за вы можете прикрепить атрибут onload для тега тела:

защищен недействительным Page_Load (объект отправителя, EventArgs е)
{

MasterPageBodyTag = (HtmlGenericControl)Page.Master.FindControl("MainBody"); 
MasterPageBodyTag.Attributes.Add("Onload", "YourJSFunction()"); 

}

Имейте в виду, что я не проверил приведенный выше пример :)

+0

Мне это нравится. Но как я могу назвать функцию javascript здесь, не добавляя ее в элемент управления? – Eric

+0

Отредактировал мой ответ с помощью непроверенного кода :) – bomortensen

0

Вы можете установить дисплей ТР с использованием быстрого скриптового блока и тройного оператора


<tr id="treditpropdamage" 
style="display:<%= ddl5.SelectedValue == "12" ? "" : "none" %>"> 

Также как FYI вы все еще можете cess runat = "server" в javascript, вам просто нужно предоставить javascript с элементами clientID. Вы можете сделать это, введя идентификатор в javascript следующим образом:

<script> 
var element = document.getElementById(""); 
</script> 
0

Используйте jQuery! Скачать .js из http://jquery.com/ или связать LIB JQuery из CDN от Google http://code.google.com/apis/libraries/devguide.html#jquery

Вот мой пример кода:

http://jsfiddle.net/jphellemons/rPK52/

if ($("#ddl5").val() == 4) 
    $("#treditpropdamage").show(); 

С Asp.Net 4 вы можете использовать clientidmode в противном случае используйте:

if ($("#<%=ddl5.ClientId%>").val() == 4) 
    $("#treditpropdamage").show(); 
Смежные вопросы