2013-09-12 7 views
1

Я абсолютный javascript noob и использую ASP.net, в моем коде за файлом aspx.cs, я объявил тело веб-документа, используя html-теги, как показано ниже ...массив внутри скрытого элемента javascript

public void CreateForm(string passengerType, int passengerCount) 
    { 
     for (int i = 1; i <= passengerCount; i++) 
     { 
      Response.Write("<table id=NameBirthTable" + passengerType + i + ">"); 
      Response.Write("<tr>"); 
       ... 
      Response.Write("<td colspan=2><input id=MiddleName" + passengerType +i    + "type=text /></td>"); 
       ... 
     } 
    } 

и когда я пытаюсь позвонить по ID элемента, который находится в ид = «MiddleName [passengerType] [я]» я не могу найти его, мне нужно получить значение этого текстового поля и передайте это на другую страницу. Кто-то предложил мне, что я использую javascript и пытаюсь сохранить эти элементы внутри скрытого элемента и добавить это к массиву, объявленному в javascript, я не получил ни одной вещи, которую он сказал, каких-либо альтернативных предложений?

+0

дать общий класс name.then по щелчку получить идентификатор соответствующего элемента click..save в скрытом поле, затем доступ через код позади. – Sasidharan

+0

@ Daniel: Вопрос: когда вы говорите «* Я не могу его найти, мне нужно получить значение этого текстового поля и передать его в другая страница * ", пытаетесь ли вы сделать это на стороне клиента (т.е. javascript) или стороне сервера (т.е. C#)? –

+0

Проверьте, не получаете ли символы пробела в вашем значении 'passengerType'? Если это так, то он не будет создавать правильный идентификатор. Если это так, вы можете попробовать заменить символ пробела (т. Е. «») С помощью undescore (т. Е. «_»), Выполнив «пассажирский тип = пассажирский тип».replace ('', '_') ' –

ответ

0

Может быть:

Response.Write("<td colspan=2><input id='MiddleName" + passengerType + i + "' type=text /></td>"); 
+0

Я попробую прямо сейчас –

0

При просмотре источника на вашей странице вы, вероятно, увидите:

<td colspan=2><input id=MiddleNameXYZ1> 
<td colspan=2><input id=MiddleNameXYZ2> 
<td colspan=2><input id=MiddleNameXYZ3> 

Другими словами, ваше кодирование не форматировать то, что вы думаете, это должно быть.

+0

Это именно то, что я хотел сделать, означает ли это, что я не могу назвать значение этого элемента просто используя код javascript –

+0

с чем-то вроде document.GetElementbyID (ID) .value = ... –

+0

Вы ожидаете, что формат будет выглядеть так: id = "MiddleName [пассажирский тип] [i]" правильно? – jeff

0

Проверьте исходный код ваших сгенерированных документов, чтобы узнать, какой идентификатор генерируется в качестве вывода вашего кода. Имейте в виду, что управление asp.net визуализируется с различными идентификаторами, а затем на стороне сервера ID. Для того, чтобы получить его в яваскрипта функции вам нужно сделать что-то подобное:

function getElement(){ 
    var myEl = document.getElementByID('<%=ControlID.ClientID%>') 
} 

где ControlID находится на стороне сервера ID вас контролировать.

В вашем конкретном случае ControlID не может быть avalaible однако, поэтому он может быть neccesary создать свойство в классе страницы, которая будет содержать элемент управления добавить - например:

class MyPage:Page{ 
    TextBox TextBoxName {get;set;} 

    public void CreateForm(string passengerType, int passengerCount) 
    { 
     TextBoxName = new TextBox(); 
     this.Controls.Add(TextBoxName); 
    } 

} 

Я знаю, что этот код может не соответствовать вашему текущему исполнению, но в целом он должен работать таким образом.

+0

вопрос использует обычные элементы id элемента html, а не asp.net. Так что это не изменится при визуализации. Кроме того, это не элементы управления, а просто строка, поэтому вы не можете использовать '<% = ControlID.ClientID%>' для них. –

+0

Пробовал это, в результате появился неверный идентификатор, я начинаю думать, что мне нужно начинать с нуля, поскольку старший программист узнал, что это не очень хорошая практика, я просто попытаюсь создать элементы управления на стороне сервера вместо того, чтобы использовать html-теги, спасибо всем, кто помогал мне –

+0

@Purnil Soni Текстовое поле было упомянуто в вопросе, поэтому я подумал, что он, возможно, был добавлен позже в коде, тем более, что он не показывал никаких «

0

попробовать ниже

public void CreateForm(string passengerType, int passengerCount) 
{ 
    StringBuilder sb = new StringBuilder(); 
    sb.AppendLine("<table id='NameBirthTable" + passengerType + "'>"); 
    for (int i = 1; i <= passengerCount; i++) 
    { 
     sb.AppendLine("<tr>"); 
     sb.AppendLine("<td colspan='2'><input id='MiddleName" + passengerType + i + "' type='text' /></td>"); 
    } 
    sb.AppendLine("</table>"); 
    Response.Write(sb.ToString()); 
} 
+0

Это то же самое, что и в вопросе, - это просто другой способ достижения. Как это помогает в ответе/решении? –

+0

@PurnilSoni не только вводит построитель строк, проверьте, что у меня есть тег таблицы перед циклом и добавлен тег конца таблицы после цикла. а также добавил '' ''для всех атрибутов. – Damith

0

На стороне сервера вы можете создать список всех созданных идентификаторов, и выводить их в качестве значения на скрытом поле.

public void CreateForm(string passengerType, int passengerCount) 
{ 
    /* List to hold id values */ 
    List<string> ids = new List<string>(); 

    for (int i = 1; i <= passengerCount; i++) 
    { 
     Response.Write("<table id=NameBirthTable" + passengerType + i + ">"); 
     Response.Write("<tr>"); 
     // ... 
     Response.Write("<td colspan=2><input id=MiddleName" + passengerType +i+ "type=text /></td>"); 
     // ... 

     /* Add newly created input id to list */ 
     ids.Add("MiddleName" + passengerType +i); 
    } 

    /* Output the ids collection to hidden field value */ 
    Response.Write("<input type='hidden' id='hiddenElement' value='" + string.Join(",", ids.ToArray()) + "'></input>"); 
} 

На стороне клиента Javascript вы можете получить все эти идентификаторы из скрытого элемента, перебрать их и получить все созданные элементы ввода

/* Get all ids from hidden element */ 
var ids = document.getElementById('hiddenElement').value.split(','); 
/* Loop through all ids */ 
for (var i = 0; i < ids.length; i++) { 
    var element = document.getElementById(ids[0]); 
    // do something 
} 
Смежные вопросы